亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

類的擴展之DataReader的擴展

2019-11-14 15:52:00
字體:
來源:轉載
供稿:網友

  看了關于DataReader的擴展,發現能節省很多代碼。從數據庫讀取數據最原始方法就是while()然后做循環,如果數據庫添加一個字段那么你所有讀取數據庫的方法全部添加。通過擴展這個類就擺脫了這種令人惡心的方式,關于效率我進行測試,當讀取不多的時候效率相差不大,當讀取幾十萬條而至數百萬的時候可能效率就不如手寫這種普通的方式,大家如果有興趣可以自己去測試。好了,開始寫

我先貼一張比較難看的圖

但是這就是轉換的一個過程:我貼代碼

1:

   /// <summary>        /// 將數據轉換為實體集合        /// </summary>        /// <typeparam name="T">類型</typeparam>        /// <param name="dr">DbDataReader對象</param>        /// <returns>實體集合</returns>        /// <remarks></remarks>        public static List<T> ToEntitys<T>(this IDataReader dr) where T : new()        {            if (dr == null) return null;            var type = typeof(T);//獲取實體類型            var hs = new Hashtable();//目的存所有實體的屬性            var PRopts = type.GetProperties();//獲取所有實體屬性            foreach (var info in propts)//存入hash表中            {                hs[info.Name.ToUpper()] = info;            }            var entitys = new List<T>();            while (dr.Read())            {                var t = new T();                for (var index = 0; index < dr.FieldCount; index++)                {                    var info = (PropertyInfo) hs[dr.GetName(index).ToUpper()];//從dr中讀取字段,然后看hash表中是否存在此屬性                    if ((info == null) || !info.CanWrite) continue;//如果沒有或者不可寫則繼續                    var data = dr.GetValue(index);//獲取屬性值                    var dType = data.GetType();//獲取屬性類型                    if (dType == typeof (Guid))                        info.SetValue(t, data == DBNull.Value ? null : data.ToString(), null);//把Guid轉換成string                    else                        info.SetValue(t, data == DBNull.Value ? null : data, null);                }                entitys.Add(t);            }            dr.Close();//關閉流            return entitys;        }

注釋1:this就表示擴展這個類(我的理解)

注釋2:SetValue() 這個就是填充值的。t是我們的實體類,data是屬性值,通過這種方式把值賦給類對應的屬性(映射)比喻一個實體類User的一個屬性Name,然后dr讀取數據庫對象也存在Name這樣一來就對應上了,然后在進行賦值。

2:進行測試

第一步:我插入數據庫14萬條數據

第二步:用普通方式讀取10條

 

        /// <summary>        /// 常規讀取數據庫        /// </summary>        [Test]        public void CommonReadTest()        {            string StrSql = "select top 10 * from DataReaderDB";            SqlDataReader reader = DbHelperSQL.ExecuteReader("", CommandType.Text, StrSql, null);            List<UserInfo> userInfos=new List<UserInfo>();            while (reader.Read())            {                UserInfo user =new UserInfo();                user.Id = reader["Id"].ToString();                int age = 0;                user.Age = int.TryParse(reader["Age"].ToString(), out age) ? age : 0;                user.Name = reader["Name"].ToString();                user.Title = reader["Title"].ToString();                user.RealName = reader["RealName"].ToString();                user.DContent = reader["DContent"].ToString();                user.Systime = DateTime.Parse(reader["Systime"].ToString());                userInfos.Add(user);            }            Assert.AreEqual(10, userInfos.Count);        }

 

運行速度(第一次由于加載導致慢。所以我選取的不是第一次,你可以多測幾次)

第三步:擴展方式讀取10條

   /// <summary>        /// 擴展流讀取數據庫        /// </summary>        [Test]        public void ExtensionReadTest()        {            string StrSql = "select top 10 * from DataReaderDB";            SqlDataReader reader = DbHelperSQL.ExecuteReader("", CommandType.Text, StrSql, null);            List<UserInfo> userInfos = reader.ToEntitys<UserInfo>();            Assert.AreEqual(10, userInfos.Count);        }

 

第四步:普通方式讀取14萬條(只貼效果圖)

第五步:擴展方式讀取14萬條

總結:從中我們可以看出當數據量越來越大的時候擴展就相對來說慢些,當時數量不大兩者相差不大,反而擴展更快,也許我測的不準,可以自己測試(注意第一次加載可能導致慢一定多測試幾次),我個人覺得如果不是太考慮效率應該用擴展,因為便于項目的維護(最后注意數據庫字段和實體類屬性記得保持一致)

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一区二区三区高清视频| 粗暴蹂躏中文一区二区三区| 91久久国产精品91久久性色| 北条麻妃久久精品| 日韩在线观看成人| 国产精品久久一| 亚洲第一天堂av| 欧美中文字幕在线视频| 国产一区二区三区在线观看网站| 国产精品爽黄69| 91成人福利在线| 在线视频免费一区二区| 欧美xxxx做受欧美.88| 日韩有码在线观看| 亚洲精品国产成人| 国产精彩精品视频| 欧美性videos高清精品| 国产精品久久久久久久久免费| 欧美在线精品免播放器视频| 国产视频精品va久久久久久| 日韩欧美在线看| 久久九九免费视频| 国产日韩欧美一二三区| 91亚洲国产成人精品性色| 国产九九精品视频| 国产一区二区日韩精品欧美精品| 欧美精品一区在线播放| 欧美成人免费va影院高清| 国产美女精品免费电影| 精品福利免费观看| 一区三区二区视频| 国产精品日韩在线观看| 91国内揄拍国内精品对白| 亚洲乱亚洲乱妇无码| 亚洲黄页视频免费观看| 国产成人精品免费久久久久| 色噜噜狠狠狠综合曰曰曰88av| 欧美日韩成人在线播放| 久久久久久亚洲精品| 成人激情综合网| 91影视免费在线观看| 国产精品久久中文| 日韩最新中文字幕电影免费看| 国产精品美腿一区在线看| 国产在线观看精品一区二区三区| 中文字幕欧美视频在线| 欧美日韩国产精品一区二区不卡中文| 91精品视频免费| 亚洲第一区在线观看| 精品呦交小u女在线| 亚洲欧美资源在线| 国产日韩欧美一二三区| 琪琪亚洲精品午夜在线| 麻豆国产va免费精品高清在线| 91网站在线看| 亚洲淫片在线视频| 国产精品久久久久久一区二区| 日韩一区av在线| 亚洲最大福利网站| 91精品视频专区| 亚洲欧美日韩成人| 中文字幕亚洲欧美日韩高清| 亚洲在线www| 日韩在线精品一区| 亚洲国产中文字幕在线观看| 欧美成人手机在线| 成人美女免费网站视频| 欧美激情第一页xxx| 精品视频—区二区三区免费| 日韩免费在线播放| 国产欧美在线观看| 国产色视频一区| 国产视频在线一区二区| 国外成人免费在线播放| 亚洲国产精品va在线观看黑人| 亚洲免费福利视频| 这里只有精品久久| 日本午夜精品理论片a级appf发布| 欧美一区二区三区……| 亚洲成人久久久久| 91精品在线国产| 精品亚洲国产成av人片传媒| 亚洲精品网址在线观看| 国产精品福利在线观看| 一区二区亚洲欧洲国产日韩| 日韩动漫免费观看电视剧高清| 亚洲欧美激情精品一区二区| 久久综合九色九九| 欧美成人h版在线观看| 91av中文字幕| 色综合久久精品亚洲国产| 国产一区二区黄| 久久国产精品久久久久久| 韩国v欧美v日本v亚洲| 亚洲韩国欧洲国产日产av| 国产精品亚洲欧美导航| 国产免费观看久久黄| 久色乳综合思思在线视频| 成人免费激情视频| 欧美成人免费全部观看天天性色| 亚洲深夜福利在线| 日韩成人激情视频| 狠狠色狠狠色综合日日五| 久久久久99精品久久久久| 日本一区二区在线播放| 中文字幕成人精品久久不卡| 欧美综合在线观看| 成人免费午夜电影| 成人亚洲欧美一区二区三区| 欧美丝袜第一区| www.日本久久久久com.| 国产精品www| 久久久久久久97| 亚洲国产欧美一区二区三区久久| 久久精品99国产精品酒店日本| 91超碰caoporn97人人| 精品久久在线播放| 欧美一区二区大胆人体摄影专业网站| 亚洲成人黄色网址| 欧美成人高清视频| 亚洲美女av在线播放| 日本精品va在线观看| 成人性生交xxxxx网站| 欧美日韩一区二区免费视频| 97**国产露脸精品国产| 欧美黄色三级网站| 久久国产精品99国产精| 亚洲欧美制服中文字幕| 欧美性生活大片免费观看网址| 久久久久999| 国自产精品手机在线观看视频| 国模视频一区二区| 91老司机在线| 久久久噜噜噜久噜久久| 亚洲xxxxx电影| 亚洲一区二区在线| 亚洲第一综合天堂另类专| 一本一道久久a久久精品逆3p| 成人亚洲激情网| 精品女同一区二区三区在线播放| 久久天堂av综合合色| 欧美最猛性xxxxx(亚洲精品)| 91香蕉嫩草神马影院在线观看| 欧美成人剧情片在线观看| 中文字幕免费国产精品| 欧美日韩精品在线视频| 国产91在线播放| 亚洲毛片一区二区| 日韩av在线影院| 26uuu另类亚洲欧美日本一| 中文字幕一精品亚洲无线一区| 欧美成人免费在线视频| 亚洲人成电影网站色www| 欧美整片在线观看| 久久久精品999| 青青青国产精品一区二区| 精品国产31久久久久久| 黑人巨大精品欧美一区二区免费| 欧美xxxx18性欧美| 尤物yw午夜国产精品视频| 国产一区二区三区在线| 亚洲国产另类久久精品| 91系列在线播放| 亚洲欧美日韩一区二区三区在线|