using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
namespace AdoNetDataAccess.Mapper
{
using AdoNetDataAccess.Core.Contract;
using AdoNetDataAccess.Core.Obj2Model;
public class SqlMapper : BaseMapper
{
private SqlMapper()
{
}
public SqlMapper(IDbOperation dbOperation)
{
this.CurrentDbOperation = dbOperation;
}
#region query for list
public override IList<T> QueryForList<T>(string sqlStr)
{
return QueryForList<T>(sqlStr, CommandType.Text, null, typeof(T));
}
public override IList<T> QueryForList<T>(string sqlStr, Type objType)
{
return QueryForList<T>(sqlStr, CommandType.Text, null, objType);
}
public override IList<T> QueryForList<T>(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return QueryForList<T>(sqlStr, cmdType, listParams, typeof(T));
}
public override IList<T> QueryForList<T>(string sqlStr, CommandType cmdType, List<DbParameter> listParams, Type objType)
{
return ModelConverter.QueryForList<T>(sqlStr, cmdType, listParams, objType, this.CurrentDbOperation);
}
#endregion
#region query for dictionary
public override IDictionary<K, T> QueryForDictionary<K, T>(string key, string sqlStr)
{
return QueryForDictionary<K, T>(key, sqlStr, CommandType.Text, null, typeof(T));
}
public override IDictionary<K, T> QueryForDictionary<K, T>(string key, string sqlStr, Type objType)
{
return QueryForDictionary<K, T>(key, sqlStr, CommandType.Text, null, objType);
}
public override IDictionary<K, T> QueryForDictionary<K, T>(string key, string sqlStr, CommandType cmdType, Type objType)
{
return QueryForDictionary<K, T>(key, sqlStr, cmdType, null, objType);
}
public override IDictionary<K, T> QueryForDictionary<K, T>(string key, string sqlStr, CommandType cmdType, List<DbParameter> listParams, Type objType)
{
return ModelConverter.QueryForDictionary<K, T>(key, sqlStr, cmdType, listParams, objType, this.CurrentDbOperation);
}
#endregion
#region dataset datatable
public override DataTable FillDataTable(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return this.CurrentDbOperation.FillDataTable(sqlStr, cmdType, listParams);
}
public override DataSet FillDataSet(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return this.CurrentDbOperation.FillDataSet(sqlStr, cmdType, listParams);
}
#endregion
#region ExecuteScalar
public override object ExecuteScalar(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return this.CurrentDbOperation.ExecuteScalar(sqlStr, cmdType, listParams);
}
#endregion
#region insert
public override int Insert(string sqlStr)
{
object obj = ExecuteScalar(sqlStr, CommandType.Text, null);
int id = obj == null ? 0 : int.Parse(obj.ToString());
return id;
}
public override int Insert(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
object obj = ExecuteScalar(sqlStr, cmdType, listParams);
int id = obj == null ? 0 : int.Parse(obj.ToString());
return id;
}
/// <summary>
/// 批量插入
/// </summary>
/// <param name="tableName"></param>
/// <param name="batchSize"></param>
/// <param name="copyTimeout"></param>
/// <param name="dt"></param>
/// <returns></returns>
public override bool BatchInsert(string tableName, int batchSize, int copyTimeout, DataTable dt)
{
return this.CurrentDbOperation.ExecuteBatchInsert(tableName, batchSize, copyTimeout, dt);
}
#endregion
#region delete
public override int Delete(string sqlStr)
{
return CommitSql(sqlStr, CommandType.Text, null);
}
public override int Delete(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return CommitSql(sqlStr, cmdType, listParams);
}
#endregion
#region update
public override int Update(string sqlStr)
{
return CommitSql(sqlStr, CommandType.Text, null);
}
public override int Update(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return CommitSql(sqlStr, cmdType, listParams);
}
#endregion
#region commit and execute sql
private int CommitSql(string sqlStr, CommandType cmdType, List<DbParameter> listParams)
{
return this.CurrentDbOperation.ExecuteNonQuery(sqlStr, cmdType, listParams);
}
#endregion
#region dbparameter
public DbParameter CreateParameter(string paraName, object paramValue)
{
return this.CurrentDbOperation.CreateDbPrameter(paraName, paramValue);
}
public List<DbParameter> CreateParameterList(string[] paraNames, object[] paramValues)
{
List<DbParameter> listParams = new List<DbParameter>();
try
{
if (paraNames.Length != paramValues.Length)
{
throw new Exception("Param name and value is not equal.");
}
for (int i = 0; i < paraNames.Length; i++)
{
DbParameter param = CreateParameter(paraNames[i], paramValues[i]);
listParams.Add(param);
}
}
catch (Exception ex)
{
throw ex;
}
return listParams;
}
#endregion
}
}