C#读取数据库返回泛型集合详解(DataSetToList)

在C#编程中,数据库操作是常见的任务,而将数据库查询结果转化为泛型集合则能够提供更高效、灵活的数据处理方式。本篇文章主要探讨如何在C#中通过使用`DataSet`对象来读取数据库,并将其转换为泛型集合,如`List<T>`。 我们来看一个基本的示例代码,它演示了如何从数据库获取数据并将其绑定到一个`GridView`控件上。`Page_Load`事件处理函数中,通过调用`GetList<LYZX.Model.LYZX_NewsTypeModel>`方法,传入数据库连接字符串和SQL查询语句,来获取数据并将其转换为`IList<LYZX.Model.LYZX_NewsTypeModel>`类型的列表: ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { IList<LYZX.Model.LYZX_NewsTypeModel> list = GetList<LYZX.Model.LYZX_NewsTypeModel>( System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString, "select * from LYZX_NewsType"); GridView1.DataSource = list; GridView1.DataBind(); } } ``` `GetList<T>`方法是关键,它接收一个数据库连接字符串`connStr`和SQL查询字符串`sqlStr`作为参数,返回一个泛型列表`IList<T>`。这个方法内部使用了`SqlConnection`和`SqlDataAdapter`来执行SQL查询,然后填充`DataSet`对象。调用`DataSetToList<T>`方法将`DataSet`中的数据转换为泛型列表: ```csharp 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); } } } ``` `DataSetToList<T>`方法接收一个`DataSet`对象和一个表示表索引的整数`tableIndex`。它检查`DataSet`是否为空,然后遍历`DataSet`中的每一行数据,通过反射创建`T`类型的实例并设置属性值。这样,每个数据行都会被转换为一个`T`类型的对象,并添加到返回的泛型列表中: ```csharp public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex) { if (dataSet == null || dataSet.Tables.Count <= tableIndex) throw new ArgumentException("Invalid data set or table index."); Type entityType = typeof(T); List<T> list = new List<T>(); foreach (DataRow row in dataSet.Tables[tableIndex].Rows) { T entity = Activator.CreateInstance<T>(); foreach (DataColumn column in dataSet.Tables[tableIndex].Columns) { PropertyInfo property = entityType.GetProperty(column.ColumnName); if (property != null && row[column] != DBNull.Value) property.SetValue(entity, Convert.ChangeType(row[column], property.PropertyType), null); } list.Add(entity); } return list; } ``` 总结一下,本文主要介绍了以下知识点: 1. 使用`SqlConnection`和`SqlDataAdapter`执行SQL查询并填充`DataSet`对象。 2. 将`DataSet`转换为泛型列表`IList<T>`,利用反射机制设置对象属性。 3. 泛型的概念和使用,如`T`作为类型参数,允许方法处理任何类型的数据。 4. 使用`using`语句确保数据库连接和数据适配器等资源在使用后被正确关闭和释放。 5. 在.NET框架中,`Activator.CreateInstance<T>()`用于动态创建指定类型的实例。 6. `Convert.ChangeType()`方法用于将数据行中的值转换为与属性匹配的类型。 7. `DataTable.Rows`和`DataColumn`属性的使用,以便访问数据行和列的信息。 这种将数据库查询结果转换为泛型集合的方法使得代码更加面向对象,易于操作和扩展,同时减少了类型转换的繁琐步骤,提高了代码的可维护性和效率。































- 光立新2021-07-26坑人,复制粘贴别人的东西

- 粉丝: 379
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 阻抗导纳控制技术:Matlab Simulink参数仿真与优化研究
- 数控编程及加工工艺基础.doc
- 收藏的精品资料软件开发实习心得体会.doc
- 多视点立体视频解码算法的优化及应用.doc
- 进化论构建网络的方法.pptx
- 科研项目管理办法(某大学).doc
- MATLAB 绘图复刻-Matlab资源
- 综合布线系统线缆敷设PPT课件.ppt
- 网络培训心得体会范文5篇.doc
- 电子商务专业实践教学体系构建.doc
- 市场部网络运营专项方案.doc
- 项目管理(ppt67)(1).ppt
- 网络游戏开发的灵魂.ppt
- 数据模型决策04网络计划.ppt
- 2022年江苏大学计算机图形学第三次实验报告二维图形变换.doc
- 武汉理工大学2012年c语言考试AB卷试题及答案.doc


