zoukankan      html  css  js  c++  java
  • dataSet==>Ilist<>的函数封装

    一般我们用使用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 已经封装好了;

  • 相关阅读:
    数据结构栈的链式存储(c语言描述)
    Glide相关api
    mac安装WireShark2.0新手教程
    android的布局 (如何实现空心圆效果的布局)
    Android如何设置只有边框背景透明的背景呢?
    failed parsing overlays.
    SVN 报错问题
    关于Fragment的点击切换数据滞留问题
    数据结构(严蔚敏版)思维导图
    【LeetCode】23.合并K个排序链表
  • 原文地址:https://www.cnblogs.com/chengcailian/p/3890814.html
Copyright © 2011-2022 走看看