C#的读取数据库返回泛型集合_C/C++语言_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

C#的读取数据库返回泛型集合

作者:黑客防线网安C/C++教程基地 来源:黑客防线网安C/C++教程基地 浏览次数:0

本篇关键词:集合返回数据库读取
黑客防线网安网讯:   一般我们用使用ADO.NET查询数据库返回泛型集合?使用SqlDataReader逐行读取数据存入对象代码/// <summary>/// 获取UserInfo泛型集合/// </summary>/// <param name="connStr">数据库连接字...
   一般我们用使用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。
代码
1  /// <summary>
2         /// 获取泛型集合
3         /// </summary>
4         /// <typeparam name="T">类型</typeparam>
5         /// <param name="connStr">数据库连接字符串</param>
6         /// <param name="sqlStr">要查询的T-SQL</param>
7         /// <returns></returns>
8          public IList<T> GetList<T>(string connStr, string sqlStr)
9         {
10             using (SqlConnection conn = new SqlConnection(connStr))
11             {
12                 using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn))
13                 {
14                     DataSet ds = new DataSet();
15                     sda.Fill(ds);
16                     return DataSetToList<T>(ds, 0);
17                 }
18             }
19         }
 
代码
1 /// <summary>
2         /// DataSetToList
3         /// </summary>
4         /// <typeparam name="T">转换类型</typeparam>
5         /// <param name="dataSet">数据源</param>
6         /// <param name="tableIndex">需要转换表的索引</param>
7         /// <returns>泛型集合</returns>
8          public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex)
9         {
10             //确认参数有效
11              if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)
12                 return null;
13
14             DataTable dt = dataSet.Tables[tableIndex];
15
16             IList<T> list = new List<T>();
17
18
19             for (int i = 0; i < dt.Rows.Count; i++)
20             {
21                 //创建泛型对象
22                  T _t = Activator.CreateInstance<T>();
23
24                 //获取对象所有属性
25                  PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
26
27                 for (int j = 0; j < dt.Columns.Count; j++)
28                 {
29                     foreach (PropertyInfo info in propertyInfo)
30                     {
31                         //属性名称和列名相同时赋值
32                         if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
33                         {
34                             if (dt.Rows[i][j]!=DBNull.Value)
35                             {
36                                 info.SetValue(_t, dt.Rows[i][j], null);
37                             }
38                             else
39                             {
40                                 info.SetValue(_t, null, null);
41                             }
42
43                             break;
44                         }
45                     }
46                 }
47                 list.Add(_t);
48             }
49             return list;
50         }
使用这种转换方式需要注意的是实体类(model)的属性必须和数据库表的字段名字一致(大小写可以不考虑);
因为转换时候的匹配是靠属性名称和字段名称匹配的;
当然如果项目中用到了Linq to Sql 的话就不必这种转换,Linq 已经封装好了;
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-15294-1.html
网站维护教程更新时间:2012-04-04 22:52:43  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer