日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#反射在ADO中的巧用

發布時間:2025/3/18 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#反射在ADO中的巧用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?在C#原生開發網站的時候,經常會碰到一個問題,后臺用原生查出來的數據一般是DataReader或者是DataTable,這樣就把數據從數據庫中拿到了,然后就是把數據綁定到前臺頁面進行輸出,這是最原生態的開發了。然后慢慢的接觸到了三層架構了,一番流程下來后,感覺三層架構相比之下確實是規范了不少,先從數據庫說,原來從數據庫查出來返回到內存的是一個DataTable,然后在前臺進行解析解析再解析,DataTable -- Column --- Row -- Cells ,在三層架構呢 ,返回一個List<>集合,我把它叫做對象數組,就是存放一種對象類型的集合,我們都知道List<>集合實現了IEumerable這個接口,SO,我們可以用foreach了然后調用model的屬性,進行輸出,上代碼:

?

foreach (var item in List<User>){Response.Write(item.id);}

  

那么問題來了,DataTable <-----> Model 這個轉化改怎么進行呢,剛開始有一種笨方法,就是先把DataTable循環出來,然后再給Model實體的屬性依次賦值,然后就這時的數據就變成了Model 里面的屬性了,是不是特笨,后來老師講了反射,然后就想到了這個方法,以前一大堆代碼的事,現在一個方法搞定,先大概看下代碼:

?

public static List<FanShe> Map<FanShe>(DataTable dt) where FanShe :class,new() {List<FanShe> list = new List<FanShe>();var prop = typeof(FanShe).GetProperties();int count = dt.Rows.Count;for (int i = 0; i < count; i++){FanShe f = new FanShe();foreach (var item in prop){item.SetValue(f,dt.Rows[i][item.Name],null);}list.Add(f);}return list;}

這樣就省事多了,DataDable ----> Map<>() ---->Model ,傳入方法一個DataTable然后就你直接拿個List<User> users 接收就ok了,是不是很爽,其實效率就是這樣慢慢高起來的,有些很繁瑣和重復的東西,如果能夠有一種自動化的方案去解決的,那肯定是絕佳了,好了,先分析下代碼:

為什么DataTable能轉化成Model實體呢 ,其實稍微想一下,就明白了,DataTable中的行和列,對應的就是Model實體的屬性和Count,然后在經過C#的反射,方法就成了。

?

public static List<FanShe> Map<FanShe>(DataTable dt) where FanShe :class,new()

方法后面的這個Where是方法的約束,具體就不多說了

?

var prop = typeof(FanShe).GetProperties();

  這一句先拿到FanShe的數據類型,他可以是User 也可以是Student ,調用方法拿到這個類型class的所有屬性,prop是一個屬性的數組,然后思路就有了

item.SetValue(f,dt.Rows[i][item.Name],null);

先foreach prop這個屬性集合,拿到的就是Id,Name,Tiele之類的,然后在Foreach DataTable,DataTa的取值可以是 Dt.Rows[0] 也可以是Dt.Rows["Id"] ,正是利用第二種方法,屬性名和DataTable的行的名字相同,然后就是for循環,走了一圈又一圈,這樣Model實體就出來了。

?

轉載于:https://www.cnblogs.com/myshowtime/p/5392109.html

總結

以上是生活随笔為你收集整理的C#反射在ADO中的巧用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。