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>/// <summary></code>
<code>/// 獲得資料清單List<>,DataReader 使用參數的</code>
<code>/// </summary></code>
<code>/// <param </code><code>name</code><code>=</code><code>"strWhere"</code><code>>條件</param></code>
<code>/// <param </code><code>name</code><code>=</code><code>"ht"</code><code>>HashTable,儲存參數名及參數對應的值</param></code>
<code>/// <</code><code>returns</code><code>>List<DotNet.Model.Base_Department></</code><code>returns</code><code>></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<DotNet.Model.Base_Department> 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>&& ht.</code><code>Count</code> <code>> 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<DotNet.Model.Base_Department> list = new List<DotNet.Model.Base_Department>();</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檔案中配置資料庫連接配接字元串,在<configuration>下的子配置節<connectionStrings>添加連接配接字元串。
(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 = "&nbsp&nbsp&nbsp學号</code>
<code> </code><code>&nbsp&nbsp&nbsp 姓名</code>
<code> </code><code>&nbsp&nbsp&nbsp 性别</code>
<code> </code><code>&nbsp&nbsp&nbsp 班級</code>
<code> </code><code>&nbsp&nbsp&nbsp 系别<br>";</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>"&nbsp&nbsp&nbsp&nbsp"</code>
<code> </code><code>+ myDr[</code><code>"sname"</code><code>].ToString().Trim()</code>
<code> </code><code>+ </code><code>"&nbsp&nbsp&nbsp&nbsp&nbsp&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>"</br>"</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,如需轉載請自行聯系原作者