Ado.net利用反射执行SQL得到实体
2013-11-20 12:01
134 查看
public Model.orderParent GetTraceIDforID(string orderid) { string sql = string.Format(" select * from orderParent where Id='{0}'", orderid); DataTable dt = new BaseBLL().DataAccess.QueryDataTable(sql); if (dt != null && dt.Rows.Count > 0) { Model.orderParent data = (Model.orderParent)ReflectionHelper.AssignDataSetToModel(dt, (new Model.orderParent()).GetType()); return data; } else { return null; } }
public static Object AssignDataSetToModel(System.Data.DataTable dt, Type objectType) { try { if (dt.Rows.Count <= 0) { return null; } System.Reflection.PropertyInfo[] pis = objectType.GetProperties(); Object obj = null; if (null != pis) { Type[] paramTypes = new Type[0]; object[] paramArray = new object[0]; obj = objectType.GetConstructor(paramTypes).Invoke(paramArray); foreach (PropertyInfo pi in pis) { if (pi.DeclaringType.Equals(objectType)) { int colIndex = getColindex(pi.Name, dt); if (pi.PropertyType.Name == "Char" || pi.PropertyType.Name == "Int32" || pi.PropertyType.Name == "Single" || pi.PropertyType.Name == "Decimal" || pi.PropertyType.Name == "DateTime" || pi.PropertyType.Name == "Boolean") { if (pi.PropertyType.Name == "Int32") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? 0 : Convert.ToInt32(dt.Rows[0][colIndex]), null); else if (pi.PropertyType.Name == "Single") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? 0 : Convert.ToSingle(dt.Rows[0][colIndex]), null); else if (pi.PropertyType.Name == "Decimal") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[0][colIndex]), null); else if (pi.PropertyType.Name == "DateTime") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? DateTime.MinValue : Convert.ToDateTime(dt.Rows[0][colIndex]), null); else if (pi.PropertyType.Name == "Boolean") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? false : Convert.ToBoolean(dt.Rows[0][colIndex]), null); else if (pi.PropertyType.Name == "Char") pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? '0' : Convert.ToChar(dt.Rows[0][colIndex]), null); } else pi.SetValue(obj, dt.Rows[0][colIndex] == DBNull.Value ? "" : dt.Rows[0][colIndex], null); } } } return obj; } catch (Exception ex) { throw ex; } }
相关文章推荐
- LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作
- C#综合揭秘——利用泛型与反射更新实体(ADO.NET Entity Framework)
- .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)
- C#综合揭秘——利用泛型与反射更新实体(ADO.NET Entity Framework)
- 利用泛型与反射更新实体(ADO.NET Entity Framework)
- .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)(转)
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- 利用ADO.NET SqlBulkCopy 大批量快速导入数据
- ADO.NET下的SqlBulkCopy类执行数据库间批量复制操作
- 使用ADO.NET 实体数据模型实现SQL存储过程调用
- 如何得到EF(ADO.NET Entity Framework)查询生成的SQL? ToTraceString Database.Log
- 第四课 ADO.NET 利用sqldataadapter来进行增,删,改操作。
- 如何在Oracle中一次执行多条sql语句【ado.net】
- 如何得到ADO.NET Entity Framework生成的SQL
- Ado.Net执行SQL时,返回执行状态(进度)
- ado.net Oracle中一次执行多条sql语句
- 如何在Oracle中一次执行多条sql语句【ado.net】
- 利用ADO.NET SqlBulkCopy 大批量快速导入数据
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- ADO.NET 执行sql命令