C#读取数据库返回泛型集合(DataSetToList)
来源:互联网 发布:广州淘宝摄影基地推荐 编辑:程序博客网 时间:2024/05/21 17:17
C#读取数据库返回泛型集合(DataSetToList)
一般我们用使用ADO.NET查询数据库返回泛型集合使用SqlDataReader逐行读取数据存入对象
- /// <summary>
- /// 获取UserInfo泛型集合
- /// </summary>
- /// <param name="connStr">数据库连接字符串</param>
- /// <param name="sqlStr">要查询的T-SQL</param>
- /// <returns></returns>
- public IList<UserInfo> GetUserInfoAll(string connStr, string sqlStr)
- {
- using (SqlConnection conn = new SqlConnection(connStr))
- {
- using (SqlCommand cmd = new SqlCommand(sqlStr,conn))
- {
- SqlDataReader sdr = cmd.ExecuteReader();
- IList<UserInfo> list = new List<UserInfo>();
- while (sdr.Read())
- {
- UserInfo userInfo = new UserInfo();
- userInfo.ID = (Guid) sdr["ID"];
- userInfo.LoginName = sdr["LoginName"].ToString();
- userInfo.LoginPwd = sdr["LoginPwd"].ToString();
- list.Add(userInfo);
- }
- return list;
- }
- }
- }
这样做虽然返回了需要的数据,但如果当数据库表非常多的时候,针对每一个表都需要去建立这样的一个方法,非常麻烦,也增加了重复劳动力。
而直接返回DataSet操作起来又不方便,DataSet是一种弱类型。也不如泛型集合操作效率高!
这个时候就需要我们来提取一个通用的转换方法了DataSetToList。
- /// <summary>
- /// 获取泛型集合
- /// </summary>
- /// <typeparam name="T">类型</typeparam>
- /// <param name="connStr">数据库连接字符串</param>
- /// <param name="sqlStr">要查询的T-SQL</param>
- /// <returns></returns>
- public IList<T> GetList<T>(string connStr, string sqlStr)
- {
- using (SqlConnection conn = new SqlConnection(connStr))
- {
- using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn))
- {
- DataSet ds = new DataSet();
- sda.Fill(ds);
- return DataSetToList<T>(ds, 0);
- }
- }
- }
- /// <summary>
- /// DataSetToList
- /// </summary>
- /// <typeparam name="T">转换类型</typeparam>
- /// <param name="dataSet">数据源</param>
- /// <param name="tableIndex">需要转换表的索引</param>
- /// <returns>泛型集合</returns>
- public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex)
- {
- //确认参数有效
- if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)
- return null;
- DataTable dt = dataSet.Tables[tableIndex];
- IList<T> list = new List<T>();
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- //创建泛型对象
- T _t = Activator.CreateInstance<T>();
- //获取对象所有属性
- PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
- for (int j = 0; j < dt.Columns.Count; j++)
- {
- foreach (PropertyInfo info in propertyInfo)
- {
- //属性名称和列名相同时赋值
- if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
- {
- if (dt.Rows[i][j]!=DBNull.Value)
- {
- info.SetValue(_t, dt.Rows[i][j], null);
- }
- else
- {
- info.SetValue(_t, null, null);
- }
- break;
- }
- }
- }
- list.Add(_t);
- }
- return list;
- }
使用这种转换方式需要注意的是实体类(model)的属性必须和数据库表的字段名字一致(大小写可以不考虑);
因为转换时候的匹配是靠属性名称和字段名称匹配的;
当然如果项目中用到了Linq to Sql 的话就不必这种转换,Linq 已经封装好了;
- C#读取数据库返回泛型集合(DataSetToList)
- C#读取数据库返回泛型集合(DataSetToList)
- C#读取数据库返回泛型集合(DataSetToList)
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#集合 泛型集合
- C#泛型集合
- C#泛型集合
- C#泛型集合
- c#泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- C# 集合类(六):Dictionary 泛型集合
- ASP统计图--饼图
- 用asp+vml实现的立体统计图-----直方图
- Linux--目录配置的依据FHS
- 双系统删除LINUX的三种办法【总结】
- javascript 压缩工具
- C#读取数据库返回泛型集合(DataSetToList)
- gcc 使用入门
- Flex自定义在DataGrid中搜索内容
- ASP+VML实现立体曲线统计图
- JSF+CSS网址收集(不断更新中)
- 用HttpHandler实现asp.net 的验证码功能
- mysql的连接使用
- Hibernate持久化对象的生命周期详解
- 串口通讯—同步通信方式