////// 数据相关的帮助类 /// public static class DbHelper { ////// 从DataReader中读取可空对象 /// ///泛型T /// IDataReader /// Key ///public static Nullable GetNullable (this IDataRecord dr, string key) where T : struct { return dr[key] == null || dr[key] == DBNull.Value ? (Nullable )null : (T)dr[key]; } /// /// 当DataReader读取对象为空时,返回defaultValue /// ///泛型T /// IDataReader /// Key /// 当取到的数据为DBNull时,应当返回的默认值 ///public static T GetDefaultWhileNullable (this IDataRecord dr, string key, T defaultValue = default(T)) { return dr[key] == null || dr[key] == DBNull.Value ? defaultValue : (T)dr[key]; } /// /// 从DataReader中读取字符串并除前后空白字符后 /// /// IDataReader /// Key ///public static string GetTrimedString(this IDataRecord dr, string key) { return dr[key].ToString().Trim(); } }
具体使用代码如下:
string sql = @"SELECT [pdate]
,[pbegtime]
,[pendtime]
,[pid]
,[pdateid] FROM tbltime WITH(NOLOCK)
WHERE pid=@PID";
IRowMapper rowMapper = MapBuilder.MapNoProperties()
.Map(p => p.ID).ToColumn("pdateid")
.Map(p => p.Name).WithFunc((dr) =>
{
return string.Format("{0}-{1}", dr.GetTrimedString("pbegtime"), dr.GetTrimedString("pendtime"));
})
.Build();
var list = db.ExecuteBySqlString(sql, null, rowMapper, new SqlParameter("@PID", 12345) { DbType = DbType.Int32 });
MessageBox.Show(list.Count.ToString());
IParameterMapper paramterMapper = new GeneralParameterMapper();
var _productAccessor = db.CreateSqlStringAccessor(sql, paramterMapper, rowMapper);
var products = _productAccessor.Execute(new SqlParameter("@PID", 12345) { DbType = DbType.Int32 }).ToList();
if (products != null && products.Count > 0)
{
MessageBox.Show(products.Count.ToString());
}