一、使用DataReader讀取為對象List
/// <summary> /// 獲得數據列表List<>,DataReader 使用參數的 /// </summary> /// <param name="strWhere">條件</param> /// <param name="ht">HashTable,保存參數名及參數對應的值</param> /// <returns>List<DotNet.Model.Base_Department></returns> /// 使用方法:string str = "id=@id";Hashtable ht = new Hashtable();ht.Add("@id", 10); public List<DotNet.Model.Base_Department> GetListUseDataReader(string strWhere, Hashtable ht=null) { StringBuilder strSql = new StringBuilder(); strSql.Append("Select Id,DepartmentName,NetCount,Remarks,CreatedOn,IsPublic,IsLock,SavedOn,LockVersion,Operator_Id from Base_Department"); if(strWhere.Trim().Length!=0) { strSql.Append(" Where " + strWhere.Trim()); } //獲取DataReader SqlDataReader reader; //組織參數 if (ht != null && ht.Count > 0) { SqlParameter[] parameters = new SqlParameter[ht.Count]; int i = 0; foreach (DictionaryEntry dc in ht) { parameters[i] = new SqlParameter() ; parameters[i].ParameterName = dc.Key.ToString(); parameters[i].Value = dc.Value; i++; } reader = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters); } else reader = DbHelperSQL.ExecuteReader(strSql.ToString()); if (reader.HasRows) { List<DotNet.Model.Base_Department> list = new List<DotNet.Model.Base_Department>(); while (reader.Read()) { DotNet.Model.Base_Department model = new DotNet.Model.Base_Department(); model.Id = reader.GetInt64(reader.GetOrdinal("Id")); model.DepartmentName = reader.GetString(reader.GetOrdinal("DepartmentName")); model.NetCount = reader.GetInt32(reader.GetOrdinal("NetCount")); model.Remarks = reader.GetString(reader.GetOrdinal("Remarks")); model.CreatedOn = reader.GetDateTime(reader.GetOrdinal("CreatedOn")); model.IsPublic = reader.GetBoolean(reader.GetOrdinal("IsPublic")); model.IsLock = reader.GetBoolean(reader.GetOrdinal("IsLock")); model.SavedOn = reader.GetDateTime(reader.GetOrdinal("SavedOn")); model.LockVersion = reader.GetInt32(reader.GetOrdinal("LockVersion")); model.Operator_Id = reader.GetInt64(reader.GetOrdinal("Operator_Id")); list.Add(model); } reader.Close(); return list; } else { reader.Close(); return null; } }
二、使用DataReader對象讀取數據
2.1 DataReader對象簡介
DataReader對象又稱數據閱讀器,是DBMS所特有的,常用來檢索大量的數據。DataReader對象是以連接的方式工作,它只允許以只讀、順向的方式查看其中所存儲的數據,並在ExecuteReader方法執行期間進行實例化。
根據.NET Framework數據提供程序不同,DataReader也可以分成SqlDataReader、OleDbDataReader等。DataReader與底層數據庫密切相聯,它實際上是一個流式的DataSet。可以參照下一節的DataSet對象與之比較學習,下面我們將着重介紹SqlDataReader。
2.2 SqlDataReader對象常用屬性
SqlDataReader對象常用屬性如下:
屬 性 |
說 明 |
FieldCount |
獲取當前行的列數 |
RecordsAffected |
獲取執行SQL語句所更改、添加或刪除的行數 |
表1 SqlDataReader對象常用屬性
2.3 常用屬性
SqlDataReader對象的常用屬性。
l FieldCount屬性
獲取DataReader對象中有幾行數據,默認值為-1。如果未放在有效的記錄集中,屬性值則為0;否則為當前行中的列數。
l RecordsAffected屬性
直到所有的行都被讀取並且數據閱讀器已經關閉時,才設置RecordsAffected屬性,其默認值為−1。該屬性的值是累積值。例如,如果以批處理模式插入3個記錄,則RecordsAffected屬性的值將為3。
SqlDataReader對象常用方法
SqlDataReader對象常用方法如下:
方 法 |
說 明 |
Read |
使DataReader對象前進到下一條記錄(如果有) |
Close |
關閉DataReader對象。注意,關閉閱讀器對象並不會自動關閉底層連接 |
Get |
用來讀取數據集的當前行的某一列的數據數據 |
表2 SqlDataReader對象常用方法
2.4 常用方法
SqlDataReader對象常用方法詳解
l Read方法
語法:public override bool Read ()
返回值:如果存在多個行,則為True;否則為False。
DataReader對象中的Read()方法用來遍歷整個結果集,不需要顯示地向前移動指針,或者檢查文件的結束,如果沒有要讀取的記錄了,則Read方法會自動返回False。
注意:要使用SqlDataReader,必須調用SqlCommand對象的ExecuteReader()方法來創建,而不要直接使用構造函數。
SqlDataReader對象的應用
實例 使用SqlDataReader對象讀取數據(源程序詳見光盤中例6.6)
本示例主要講解在ASP.NET應用程序中如何使用SqlDataReader對象讀取數據庫中的數據。執行程序,運行結果如圖6.11所示:
圖1 讀取數據的結果圖
程序實現的步驟:
(1)、新建一個網站,默認主頁是Default.aspx。
(2)、在Web.Config文件中配置數據庫連接字符串,在<configuration>下的子配置節<connectionStrings>添加連接字符串。
(3)、向Default.aspx頁中添加一個label控件將其命名為lblStudent,在Page_Load中寫下如下代碼:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SqlConnection myConn = GetConnection(); string sqlStr = "select * from tbStudent"; //查詢所有學生信息的SQL SqlCommand myCmd = new SqlCommand(sqlStr, myConn);//創建Command對象 try { myConn.Open(); //執行SQL語句,並返回DataReader對象 SqlDataReader myDr = myCmd.ExecuteReader(); //顯示標題文字 this.lblStudent.Text = "   學號     姓名     性別     班級     系別<br>"; while (myDr.Read()) //循環讀取結果集 { //讀取數據庫中的信息並顯示在界面中 this.lblStudent.Text +=myDr["sno"].ToString().Trim() + "    " + myDr["sname"].ToString().Trim() + "      " + myDr["ssex"].ToString().Trim() + "    " + myDr["sclass"].ToString().Trim() + "    " +myDr["sdept"].ToString().Trim() +"</br>"; } myDr.Close(); //關閉DataReader } catch { Response.Write("連接失敗!"); //異常處理 } finally { myConn.Close(); //關閉數據庫連接 } } }
參考文章
1. 雪夜, DataReader方式 獲取數據.
2. 悠哲RHT, 使用DataReader對象讀取數據.