dataSet==>Ilist<>的函數封裝

來源:互聯網
上載者:User

標籤:使用   os   io   資料   for   ar   cti   代碼   

一般我們用使用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 已經封裝好了;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.