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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ADO.NET 2.0中的SqlCommand.ExecutePageReader

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADO.NET 2.0中的SqlCommand.ExecutePageReader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.joycode.com/liuhuimiao/

在.NET 2.0 PDC或Beta1中,可以看到SqlCommand對象新增了個ExecutePageReader方法,該方法實現了分頁讀取數據的功能。對于分頁讀取數據,在ADO.NET1.1中(當然2.0也適合)一般常用動態構造SQL語句實現:

??? SqlDataReader GetPage(int pageNumber, int pageSize)
??? {
???????
//pageNumber: 從 0 開始計數的頁碼
???????
//pageSize: 每頁的記錄數
??????? String command = String.Format("SELECT * FROM (SELECT TOP {0} * FROM " +
??????????
"Products ORDER BY ProductID) AS t1 WHERE ProductID NOT IN " +
??????????
"(SELECT TOP {1} ProductID FROM Products ORDER BY ProductID) ",
?????????? pageSize
* (pageNumber + 1), pageSize * pageNumber);

??????? SqlConnection conn
= new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
??????? SqlCommand cmd
= new SqlCommand(command, conn);
??????? conn.Open();
??????? SqlDataReader dr
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
???????
return dr;
??? }

??????? 有時為更好實現分頁性能效果,也可以采用存儲過程建立臨時表的方式進行數據分頁,但原理基本都差不多。在ADO.NET 2.0 PDC/Beta1中,用SqlCommand.ExecutePageReader進行數據分頁:

??? SqlDataReader GetPageReader(int pageNumber, int pageSize)
??? {
???????
int startIndex = (pageNumber - 1) * pageSize;
??????? String command
= "SELECT * FROM Products";
??????? SqlConnection conn
= new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
??????? SqlCommand cmd
= new SqlCommand(command, conn);
??????? conn.Open();
??????? SqlDataReader dr
= cmd.ExecutePageReader(CommandBehavior.CloseConnection, startIndex, pageSize);

???????
return dr;
??? }

??????? 最后綁定第2頁的5行數據(ProductID從6到10)到GridView1上:

??????? GridView1.DataSource = GetPage(1, 5);
??????? GridView1.DataBind();

??????? 從上可以看到,用了ExecutePageReader確實簡單了很多。但是,很“不幸”告訴大家,ExecutePageReader在未來版本中將不會出現,也就是說被cut掉了。至于cut的真正原因,還真不知道。不過,我試圖用Reflector去看其內部,發現這樣一個調用順序:ExecutePageReader()—》SqlResultSet.CompleteOpenForPageReader()—》SqlResultSet.FetchInternal()—》執行存儲過程sp_cursorfetch,也就是實際ExecutePageReader使用了SQLServer的服務器游標進行數據分頁讀取,但這跟它被cut是否有關?這么好用的一個功能被cut是不是有其他考慮?或許ADO.NET開發小組在魚和熊掌取舍之間已經做了抉擇,只是我還是覺得ExecutePageReader(據說SqlResultSet也被cut,然后連同ExecutePageReader被cut)被cut很可惜。

總結

以上是生活随笔為你收集整理的ADO.NET 2.0中的SqlCommand.ExecutePageReader的全部內容,希望文章能夠幫你解決所遇到的問題。

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