DataReader方式 獲取數據的操作


 

一、使用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 = "&nbsp&nbsp&nbsp學號 
                &nbsp&nbsp&nbsp 姓名
                &nbsp&nbsp&nbsp 性別
               &nbsp&nbsp&nbsp 班級
                &nbsp&nbsp&nbsp 系別<br>";
              while (myDr.Read())          //循環讀取結果集
                {
                       //讀取數據庫中的信息並顯示在界面中
                      this.lblStudent.Text +=myDr["sno"].ToString().Trim()
                              + "&nbsp&nbsp&nbsp&nbsp"
                              + myDr["sname"].ToString().Trim()
                              + "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"
                              + myDr["ssex"].ToString().Trim()
                              + "&nbsp&nbsp&nbsp&nbsp"
                              + myDr["sclass"].ToString().Trim()
                              + "&nbsp&nbsp&nbsp&nbsp" 
                              +myDr["sdept"].ToString().Trim()
                              +"</br>";
                }
                myDr.Close();            //關閉DataReader
            }
            catch
            {
                Response.Write("連接失敗!"); //異常處理
            }
            finally
            {
                myConn.Close();      //關閉數據庫連接
            }
        }
}                        

 

 

 

參考文章

1. 雪夜, DataReader方式 獲取數據.

2. 悠哲RHT, 使用DataReader對象讀取數據.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM