一、使用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對象讀取數據.
