天天看點

DataReader方式 擷取資料的操作一、使用DataReader讀取為對象List二、使用DataReader對象讀取資料

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

<code>/// &lt;summary&gt;</code>

<code>/// 獲得資料清單List&lt;&gt;,DataReader 使用參數的</code>

<code>/// &lt;/summary&gt;</code>

<code>/// &lt;param </code><code>name</code><code>=</code><code>"strWhere"</code><code>&gt;條件&lt;/param&gt;</code>

<code>/// &lt;param </code><code>name</code><code>=</code><code>"ht"</code><code>&gt;HashTable,儲存參數名及參數對應的值&lt;/param&gt;</code>

<code>/// &lt;</code><code>returns</code><code>&gt;List&lt;DotNet.Model.Base_Department&gt;&lt;/</code><code>returns</code><code>&gt;</code>

<code>/// 使用方法:string str = </code><code>"id=@id"</code><code>;Hashtable ht = new Hashtable();ht.</code><code>Add</code><code>(</code><code>"@id"</code><code>, 10);</code>

<code>public</code> <code>List&lt;DotNet.Model.Base_Department&gt; GetListUseDataReader(string strWhere, Hashtable ht=</code><code>null</code><code>)</code>

<code>{</code>

<code>    </code><code>StringBuilder strSql = new StringBuilder();</code>

<code>    </code><code>strSql.Append(</code><code>"Select Id,DepartmentName,NetCount,Remarks,CreatedOn,IsPublic,IsLock,SavedOn,LockVersion,Operator_Id from Base_Department"</code><code>);</code>

<code>    </code><code>if(strWhere.Trim().Length!=0)</code>

<code>    </code><code>{</code>

<code>        </code><code>strSql.Append(</code><code>" Where "</code> <code>+ strWhere.Trim());</code>

<code>    </code><code>}</code>

<code>    </code><code>//擷取DataReader</code>

<code>    </code><code>SqlDataReader reader;</code>

<code>    </code><code>//組織參數</code>

<code>    </code><code>if (ht != </code><code>null</code> <code>&amp;&amp; ht.</code><code>Count</code> <code>&gt; 0)</code>

<code>        </code><code>SqlParameter[] parameters = new SqlParameter[ht.</code><code>Count</code><code>];</code>

<code>        </code><code>int</code> <code>i = 0;</code>

<code>        </code><code>foreach (DictionaryEntry dc </code><code>in</code> <code>ht)</code>

<code>        </code><code>{</code>

<code>            </code><code>parameters[i] = new SqlParameter() ;</code>

<code>            </code><code>parameters[i].ParameterName = dc.</code><code>Key</code><code>.ToString();</code>

<code>            </code><code>parameters[i].Value = dc.Value;</code>

<code>            </code><code>i++;</code>

<code>        </code><code>}</code>

<code>         </code><code>reader = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters);</code>

<code>    </code><code>else</code>

<code>        </code><code>reader = DbHelperSQL.ExecuteReader(strSql.ToString());</code>

<code>    </code><code>if (reader.HasRows)</code>

<code>        </code><code>List&lt;DotNet.Model.Base_Department&gt; list = new List&lt;DotNet.Model.Base_Department&gt;();</code>

<code>        </code><code>while (reader.</code><code>Read</code><code>())</code>

<code>            </code><code>DotNet.Model.Base_Department model = new DotNet.Model.Base_Department();</code>

<code>            </code><code>model.Id = reader.GetInt64(reader.GetOrdinal(</code><code>"Id"</code><code>));</code>

<code>            </code><code>model.DepartmentName = reader.GetString(reader.GetOrdinal(</code><code>"DepartmentName"</code><code>));</code>

<code>            </code><code>model.NetCount = reader.GetInt32(reader.GetOrdinal(</code><code>"NetCount"</code><code>));</code>

<code>            </code><code>model.Remarks = reader.GetString(reader.GetOrdinal(</code><code>"Remarks"</code><code>));</code>

<code>            </code><code>model.CreatedOn = reader.GetDateTime(reader.GetOrdinal(</code><code>"CreatedOn"</code><code>));</code>

<code>            </code><code>model.IsPublic = reader.GetBoolean(reader.GetOrdinal(</code><code>"IsPublic"</code><code>));</code>

<code>            </code><code>model.IsLock = reader.GetBoolean(reader.GetOrdinal(</code><code>"IsLock"</code><code>));</code>

<code>            </code><code>model.SavedOn = reader.GetDateTime(reader.GetOrdinal(</code><code>"SavedOn"</code><code>));</code>

<code>            </code><code>model.LockVersion = reader.GetInt32(reader.GetOrdinal(</code><code>"LockVersion"</code><code>));</code>

<code>            </code><code>model.Operator_Id = reader.GetInt64(reader.GetOrdinal(</code><code>"Operator_Id"</code><code>));</code>

<code>            </code><code>list.</code><code>Add</code><code>(model);</code>

<code>        </code><code>reader.</code><code>Close</code><code>();</code>

<code>        </code><code>return</code> <code>list;</code>

<code>        </code><code>return</code> <code>null</code><code>;</code>

<code>}</code>

DataReader對象又稱資料閱讀器,是DBMS所特有的,常用來檢索大量的資料。DataReader對象是以連接配接的方式工作,它隻允許以隻讀、順向的方式檢視其中所存儲的資料,并在ExecuteReader方法執行期間進行執行個體化。

根據.NET Framework資料提供程式不同,DataReader也可以分成SqlDataReader、OleDbDataReader等。DataReader與底層資料庫密切相聯,它實際上是一個流式的DataSet。可以參照下一節的DataSet對象與之比較學習,下面我們将着重介紹SqlDataReader。

SqlDataReader對象常用屬性如下:

屬  性

說   明

FieldCount

擷取目前行的列數

RecordsAffected

擷取執行SQL語句所更改、添加或删除的行數

表1 SqlDataReader對象常用屬性

SqlDataReader對象的常用屬性。

l   FieldCount屬性

擷取DataReader對象中有幾行資料,預設值為-1。如果未放在有效的記錄集中,屬性值則為0;否則為目前行中的列數。

l   RecordsAffected屬性

直到所有的行都被讀取并且資料閱讀器已經關閉時,才設定RecordsAffected屬性,其預設值為−1。該屬性的值是累積值。例如,如果以批處理模式插入3個記錄,則RecordsAffected屬性的值将為3。

SqlDataReader對象常用方法

SqlDataReader對象常用方法如下:

方  法

Read

使DataReader對象前進到下一條記錄(如果有)

Close

關閉DataReader對象。注意,關閉閱讀器對象并不會自動關閉底層連接配接

Get

用來讀取資料集的目前行的某一列的資料資料

表2 SqlDataReader對象常用方法

SqlDataReader對象常用方法詳解

l   Read方法

文法:public override bool Read ()

傳回值:如果存在多個行,則為True;否則為False。

DataReader對象中的Read()方法用來周遊整個結果集,不需要顯示地向前移動指針,或者檢查檔案的結束,如果沒有要讀取的記錄了,則Read方法會自動傳回False。

注意:要使用SqlDataReader,必須調用SqlCommand對象的ExecuteReader()方法來建立,而不要直接使用構造函數。

SqlDataReader對象的應用

執行個體  使用SqlDataReader對象讀取資料(源程式詳見CD光牒中例6.6)

本示例主要講解在ASP.NET應用程式中如何使用SqlDataReader對象讀取資料庫中的資料。執行程式,運作結果如圖6.11所示:

圖1 讀取資料的結果圖

程式實作的步驟:

(1)、建立一個網站,預設首頁是Default.aspx。

(2)、在Web.Config檔案中配置資料庫連接配接字元串,在&lt;configuration&gt;下的子配置節&lt;connectionStrings&gt;添加連接配接字元串。

(3)、向Default.aspx頁中添加一個label控件将其命名為lblStudent,在Page_Load中寫下如下代碼:

<code>protected</code> <code>void</code> <code>Page_Load(</code><code>object</code> <code>sender, EventArgs e)</code>

<code>        </code><code>if</code> <code>(!IsPostBack)</code>

<code>            </code><code>SqlConnection myConn = GetConnection();</code>

<code>            </code><code>string</code> <code>sqlStr = </code><code>"select * from tbStudent"</code><code>;  </code><code>//查詢所有學生資訊的SQL</code>

<code>            </code><code>SqlCommand myCmd = </code><code>new</code> <code>SqlCommand(sqlStr, myConn);</code><code>//建立Command對象</code>

<code>            </code><code>try</code>

<code>            </code><code>{</code>

<code>                </code><code>myConn.Open();</code>

<code>                </code><code>//執行SQL語句,并傳回DataReader對象</code>

<code>                </code><code>SqlDataReader myDr = myCmd.ExecuteReader();</code>

<code>                </code><code>//顯示标題文字</code>

<code>                </code><code>this</code><code>.lblStudent.Text = "&amp;nbsp&amp;nbsp&amp;nbsp學号</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 姓名</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 性别</code>

<code>               </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 班級</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 系别&lt;br&gt;";</code>

<code>              </code><code>while</code> <code>(myDr.Read())          </code><code>//循環讀取結果集</code>

<code>                </code><code>{</code>

<code>                       </code><code>//讀取資料庫中的資訊并顯示在界面中</code>

<code>                      </code><code>this</code><code>.lblStudent.Text +=myDr[</code><code>"sno"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+ </code><code>"&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp"</code>

<code>                              </code><code>+ myDr[</code><code>"sname"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+ </code><code>"&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp"</code>

<code>                              </code><code>+ myDr[</code><code>"ssex"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+ myDr[</code><code>"sclass"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+myDr[</code><code>"sdept"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+</code><code>"&lt;/br&gt;"</code><code>;</code>

<code>                </code><code>}</code>

<code>                </code><code>myDr.Close();            </code><code>//關閉DataReader</code>

<code>            </code><code>}</code>

<code>            </code><code>catch</code>

<code>                </code><code>Response.Write(</code><code>"連接配接失敗!"</code><code>); </code><code>//異常處理</code>

<code>            </code><code>finally</code>

<code>                </code><code>myConn.Close();      </code><code>//關閉資料庫連接配接</code>

<code>}                       </code>

參考文章

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。

    本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/5822523.html,如需轉載請自行聯系原作者