国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何對DataSet進行強類型化

數據庫
在項目中經常需要用到DataSet來存放數據,但是一直覺得從數據集中獲取數據使用是一件很難受的事情,特別是當需要用到強類型數據的時候,就想到了動手寫個方法來實現。

在項目中經常需要用到DataSet來存放數據,但是一直覺得從數據集中獲取數據使用是一件很難受的事情,特別是當需要用到強類型數據的時候,就想到了動手寫個方法來實現。

  1. /// <summary>    
  2.     /// 將數據集強類型化    
  3.     /// </summary>    
  4.     /// <typeparam name="T">轉換類型</typeparam>    
  5.     /// <param name="dataSet">數據源</param>    
  6.     /// <param name="tableIndex">需要轉換表的索引</param>    
  7.     /// <returns>泛型集合</returns>    
  8.     public static IList<T> ToList<T>(this DataSet dataSet, int tableIndex)    
  9.      {    
  10.          //確認參數有效    
  11.          if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)    
  12.              return null;    
  13.          DataTable dt = dataSet.Tables[tableIndex];    
  14.          IList<T> list = new List<T>();    
  15.          for (int i = 0; i < dt.Rows.Count; i++)    
  16.          {    
  17.               //創建泛型對象    
  18.               T _t = Activator.CreateInstance<T>();    
  19.               //獲取對象所有屬性    
  20.               PropertyInfo[] propertyInfo = _t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);    
  21.               for (int j = 0; j < dt.Columns.Count; j++)    
  22.               {    
  23.                   foreach (PropertyInfo info in propertyInfo)    
  24.                   {    
  25.                       //屬性名稱和列名相同時賦值    
  26.                       if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))    
  27.                       {    
  28.                           if (dt.Rows[i][j] != DBNull.Value)    
  29.                           {    
  30.                               info.SetValue(_t, dt.Rows[i][j].ConvertDataTo(info.PropertyType), null);    
  31.                           }    
  32.                           else   
  33.                           {    
  34.                               info.SetValue(_t, null, null);    
  35.                           }    
  36.                           break;    
  37.                       }    
  38.                   }    
  39.               }    
  40.               list.Add(_t);    
  41.          }    
  42.          return list;    
  43.      }  

在需要給屬性賦值的時候,為了避免數據集中的字段名與用戶定義的Model屬性名一致而類型不一致的問題,我又寫了個方法,用來把對象進行類型轉換:

  1. public static object ConvertDataTo(this object obj,Type type)     
  2. {    
  3.     if (obj.GetType().Equals(type))    
  4.     {    
  5.         return obj;    
  6.     }    
  7.     else   
  8.     {    
  9.         try   
  10.         {    
  11.             if (type == typeof(string)) { return obj.ToString(); }    
  12.             MethodInfo parseMethod = null;    
  13.             foreach (MethodInfo mi in type.GetMethods(BindingFlags.Static | BindingFlags.Public))    
  14.             {    
  15.                 if (mi.Name == "Parse" && mi.GetParameters().Length == 1)    
  16.                 { parseMethod = mi; break; }    
  17.             }    
  18.             if (parseMethod == null)    
  19.             {    
  20.                 return null;    
  21.             }    
  22.             return parseMethod.Invoke(null, new object[] { obj });     
  23.         }    
  24.         catch    
  25.         {    
  26.             return null;    
  27.             throw;    
  28.         }    
  29.     }    
  30. }  

其實這么寫是比較偷懶的寫法,用了這么多反射, 于是想到做一下性能測試,我建的MVC項目,看一下測試結果:

  1. public ActionResult Index()    
  2.      {    
  3.          DataSet ds = new DataSet();    
  4.          DataTable dt = new DataTable();    
  5.          dt.Columns.Add("resourcename1", typeof(string));    
  6.          dt.Columns.Add("resourcename2", typeof(string));    
  7.          dt.Columns.Add("resourcename3", typeof(string));    
  8.          dt.Columns.Add("resourcename4", typeof(string));    
  9.          dt.Columns.Add("resourcename5", typeof(string));    
  10.          dt.Columns.Add("fitsex1", typeof(int));    
  11.          dt.Columns.Add("fitsex2", typeof(int));    
  12.          dt.Columns.Add("fitsex3", typeof(int));    
  13.          dt.Columns.Add("fitsex4", typeof(int));    
  14.          dt.Columns.Add("fitsex5", typeof(int));    
  15.          for (int i = 0; i < 5000; i++)    
  16.          {    
  17.               DataRow row = dt.NewRow();    
  18.               row[0] = "王虎" + i.ToString();    
  19.               row[1] = "王虎" + i.ToString();    
  20.               row[2] = "王虎" + i.ToString();    
  21.               row[3] = "王虎" + i.ToString();    
  22.               row[4] = "王虎" + i.ToString();    
  23.               row[5] = i;    
  24.               row[6] = i;    
  25.               row[7] = i;    
  26.               row[8] = i;    
  27.               row[9] = i;    
  28.               dt.Rows.Add(row);    
  29.           }    
  30.           ds.Tables.Add(dt);    
  31.           var watch = new Stopwatch();    
  32.           watch.Start();    
  33.           var ModelList = ds.ToList<Model_Resource>(0);    
  34.           watch.Stop();    
  35.           ViewData["Message"] = string.Format("ModelList.count={0},Elapsed Milliseconds:{1}", ModelList.Count.ToString(),watch.ElapsedMilliseconds.ToString());    
  36.           return View();    
  37.      }  

我使用的類定義如下:

  1. /// <summary>    
  2.   /// 實體類Resource 。(屬性說明自動提取數據庫字段的描述信息)    
  3.   /// </summary>    
  4.   [Serializable]    
  5.   public class Model_Resource    
  6.   {    
  7.       public Model_Resource()    
  8.       { }    
  9.       #region Model    
  10.       /// <summary>    
  11.       /// 資源標準名稱    
  12.       /// </summary>    
  13.       public string ResourceName1    
  14.       {    
  15.           get;    
  16.           set;    
  17.       }    
  18.       /// <summary>    
  19.       /// 資源標準名稱    
  20.       /// </summary>    
  21.       public string ResourceName2    
  22.       {    
  23.           get;    
  24.           set;    
  25.       }    
  26.       /// <summary>    
  27.       /// 資源標準名稱    
  28.       /// </summary>    
  29.       public string ResourceName3    
  30.       {    
  31.           get;    
  32.           set;    
  33.       }    
  34.       /// <summary>    
  35.       /// 資源標準名稱    
  36.       /// </summary>    
  37.       public string ResourceName4    
  38.       {    
  39.           get;    
  40.           set;    
  41.       }    
  42.       /// <summary>    
  43.       /// 資源標準名稱    
  44.       /// </summary>    
  45.       public string ResourceName5    
  46.       {    
  47.           get;    
  48.           set;    
  49.       }    
  50.       /// <summary>    
  51.       /// 適合的性別 1 男 2 女 3 均可    
  52.       /// </summary>    
  53.       public string FitSex1    
  54.       {    
  55.           get;    
  56.           set;    
  57.       }    
  58.       /// <summary>    
  59.       /// 適合的性別 1 男 2 女 3 均可    
  60.       /// </summary>    
  61.       public string FitSex2    
  62.       {    
  63.           get;    
  64.           set;    
  65.       }    
  66.       /// <summary>    
  67.       /// 適合的性別 1 男 2 女 3 均可    
  68.       /// </summary>    
  69.       public string FitSex3    
  70.       {    
  71.           get;    
  72.           set;    
  73.       }    
  74.       /// <summary>    
  75.       /// 適合的性別 1 男 2 女 3 均可    
  76.       /// </summary>    
  77.       public string FitSex4    
  78.       {    
  79.           get;    
  80.           set;    
  81.       }    
  82.       /// <summary>    
  83.       /// 適合的性別 1 男 2 女 3 均可    
  84.       /// </summary>    
  85.       public string FitSex5    
  86.       {    
  87.           get;    
  88.           set;    
  89.       }    
  90.       #endregion Model    
  91.   }  

看一下測試結果:

注:

性能上還可以通過緩存等機制優化一下,不過這方面已經有一些大牛做過了,以后有時間可以加進去。

原文鏈接:http://www.cnblogs.com/wbpmrck/archive/2011/04/12/2013730.html

【編輯推薦】

  1. 一步一步設計你的數據庫1
  2. 為自己做一個簡單記賬簿
  3. 曬曬我的通用數據訪問層
  4. 幾步走,教你創建簡單訪問數據庫方法
  5. 微軟研究人員:NoSQL需要標準化
責任編輯:艾婧 來源: 博客園
相關推薦

2009-06-11 17:54:00

Visual StudDataSet

2011-09-29 09:43:44

基礎架構虛擬化IT

2009-02-13 10:33:00

交換機初始化配置

2011-05-16 15:36:00

軟件測試

2017-02-22 13:48:49

Tableau可視化

2011-09-07 10:02:41

Exchange 20虛擬化

2009-12-30 10:49:32

ADO.NET Ent

2011-03-02 10:33:33

終端虛擬化

2011-01-20 10:33:30

Postfix

2023-01-30 08:30:09

Tomcat性能優化

2009-12-29 14:09:17

ADO.NET通用接口

2009-12-29 16:50:13

ADO DataSet

2020-05-20 12:30:44

容器Linux系統

2010-05-11 08:58:22

mysql表字段

2022-04-26 05:55:13

容器K8s管理debug問題

2010-01-20 17:48:07

C++ 函數重載

2021-09-02 22:52:16

ValueDictionary排序

2021-09-27 16:39:10

PythonGif壓縮

2010-02-02 14:11:14

Python 進行編程

2020-12-22 21:57:39

人臉識別AI人工智能
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区不卡| 韩国三级日本三级少妇99| 日本电影亚洲天堂| 欧美在线一级视频| 精品少妇无遮挡毛片| 欧美久久亚洲| 精品国产成人| 亚洲一区自拍偷拍| 欧美日韩一区二区三区在线看| 久久亚洲高清| 免费在线观看视频一区| 国产精品露脸自拍| 色综合www| 欧美精品激情在线观看| 欧美xnxx| 亚洲人a成www在线影院| 亚洲黄色中文字幕| 精品精品国产毛片在线看| 日韩国产精品毛片| 国产精品99在线观看| 精品国产sm最大网站| 66视频精品| 国产精品日韩欧美大师| 欧美黑白配在线| 91精品国产91久久久久久最新| 午夜视频一区二区在线观看| 欧美猛交免费看| 久久久久久毛片免费看 | 国产精一品亚洲二区在线视频| 黄色91av| 日日夜夜免费精品| 国产高潮呻吟久久久| 国产乱子伦视频一区二区三区| 男人的天堂avav| 国产女人18水真多18精品一级做| 四虎最新地址发布| 一本久道久久综合中文字幕 | 亚洲黄色录像片| 亚州av电影免费在线观看| 国产91在线播放精品91| 日韩avvvv在线播放| 国产一区二区免费电影| 一本色道久久综合| 国产精品视频入口| 精品成人国产| 国产免费视频| 欧美高清在线视频| 玩弄中年熟妇正在播放| 亚洲黄色精品| 国产精品免费一区二区三区四区 | 国产日产一区| 欧美亚洲图片小说| 亚洲爆乳无码精品aaa片蜜桃| 国产精品极品在线观看| 韩剧1988免费观看全集| 欧美成人午夜| 欧美中文字幕在线观看视频| 国产精品视频观看| 拍真实国产伦偷精品| 精品国内自产拍在线观看| av伊人久久| 色乱码一区二区三区熟女 | 久久蜜桃av一区精品变态类天堂 | 国产精品麻豆99久久久久久| 在线影院av| 精品va天堂亚洲国产| 999精品视频在线观看| 国产精品久久久久久久av电影| 日韩影院在线观看| 黄页在线免费看| 亚洲成人久久网| 精品国产欧美日韩| 成年人视频网站免费| 欧美日韩亚洲系列| 欧美激情精品| 亚洲欧美日韩国产成人综合一二三区 | 国产中文字幕在线视频| 国产亚洲精品久久久| 亚洲理论电影网| 日韩avxxx| 精品久久久久久中文字幕一区奶水 | 成人伊人精品色xxxx视频| 精品午夜久久福利影院| jk破处视频在线| 在线观看精品国产视频| 激情亚洲网站| 免费网站www在线观看| 国产一区二区三区视频| 欧美日韩亚洲三区| 国产精品后入内射日本在线观看| 欧美日韩国产小视频在线观看| 一区二区免费| 国产乱人伦精品一区二区三区| 欧美日本韩国一区二区三区视频| 国产麻豆一区二区三区精品视频| 成人免费观看cn| 精品国产乱码91久久久久久网站| 久久久久国产| 宅男深夜国产| 91超碰caoporn97人人| 成人免费视频国产在线观看| 伊人精品影院| 中文字幕第12页| 亚洲午夜未删减在线观看| free欧美| 国产精品高潮在线| 91免费在线视频观看| 天天色天天射天天综合网| 国产精品一区二区三区毛片淫片| 成人的网站免费观看| 污网站在线免费看| 国产精品一区二区a| 亚洲国产成人porn| 亚洲人成精品久久久| 国产嫩草在线观看| 久久国产精品久久久| 丁香婷婷综合色啪| 日韩一级二级| 国产传媒久久久| 国产一级揄自揄精品视频| 精品一区二区免费在线观看| a级在线观看| 日本视频一区二区不卡| 制服.丝袜.亚洲.另类.中文| 影音先锋亚洲精品| 99re在线视频| 国模精品一区二区三区| 欧美午夜影院一区| 日韩视频三区| 波多野结衣精品| 正在播放国产精品| 亚洲深夜福利在线| aaa国产一区| 日本高清久久| 国外亚洲成av人片在线观看| 国产成人精品久久二区二区| 亚洲高清久久久| 国产综合亚洲精品一区二| 大地资源中文在线观看免费版| 99热在线国产| 日韩精品一区二区三区四区 | 成人动漫网站在线观看| 精品色蜜蜜精品视频在线观看| 国产精品99视频| 波多野结衣在线影院| 日韩欧美亚洲精品| 亚洲网址你懂得| 国产日韩精品一区| 国产在线观看91一区二区三区 | 中文字幕乱码亚洲无线精品一区| 黄色在线视频观看网站| 亚洲男人天堂久| 亚洲国产日韩一区| 亚洲成人自拍网| 亚洲欧美视频一区二区三区| 久久综合九色| 午夜成年人在线免费视频| 一级片视频免费观看| 国产97免费视| 亚洲成人av片在线观看| 亚洲电影中文字幕在线观看| 可以免费看不卡的av网站| 4438成人网| 亚洲国产成人高清精品| 丁香花在线观看完整版电影| 精品嫩模一区二区三区| 久久好看免费视频| 一个色在线综合| 亚洲一区二区动漫| 青青草国产一区二区三区| 国外av网站| 91精品久久久久久久| 欧美精品一区二区三区在线播放| 91欧美激情一区二区三区成人| 奇米影视亚洲| 欧美aaaaa性bbbbb小妇| 日本成人中文字幕在线| 免费在线看黄色| 成人国产网站| 97色成人综合网站| av亚洲免费| 亚洲人成精品久久久| 青草成人免费视频| 色婷婷国产精品综合在线观看| 免费人成在线不卡| 成人精品动漫一区二区三区| 成人av一区| 天天爽天天爽夜夜爽| 欧美成人在线免费观看| 性欧美视频videos6一9| 日韩欧美国产wwwww| 国产精品免费人成网站| 午夜在线精品| 欧美日韩一区二区三区四区不卡 | 成年人免费网站| 91精品国产自产91精品| 草草视频在线| 色视频免费在线观看| 欧美日本一区二区高清播放视频| 日韩视频不卡|