C#與資料庫訪問技術總結(十二)資料閱讀器(DataReader)2

來源:互聯網
上載者:User

標籤:style   blog   io   color   ar   os   使用   for   sp   

遍曆資料閱讀器中的記錄

當ExecuteReader方法返回DataReader對象時,當前游標的位置在第一條記錄的前面。

必須調用閱讀器的Read方法把游標移動到第一條記錄,然後,第一條記錄將變成目前記錄。

如果資料閱讀器所包含的記錄不止一條,Read方法就返回一個Boolean值true。

想要移到下一條記錄,需要再次調用Read方法。重複上述過程,直到最後一條記錄,那時Read方法將返回false。

經常使用while迴圈來遍曆記錄:

    while(reader.Read())

    {

          //讀取資料

    }

    只要Read方法返回的值為true,就可以訪問目前記錄中包含的欄位。

訪問欄位中的值

ADO.NET提供了兩種方法訪問記錄中的欄位。

第一種是Item屬性,此屬性返回由欄位索引或欄位名指定的欄位值。

第二種方法是Get方法,此方法返回由欄位索引指定欄位的值。

DataReader類有一個索引符,可以使用常見的數組文法訪問任何欄位。

使用這種方法,既可以通過指定資料列的名稱,也可以通過指定資料列的編號來訪問特定列的值。

第一列的編號是0,第二列編號是1,依次類推。例如:

Object value1=myDataReader["學號"];

Object value1=myDataReader[0];

Item屬性

每一個DataReader類都定義了一個Item屬性,此屬性返回一個代碼欄位屬性的對象。

Item屬性是DataReader類的索引。

需要注意的是Item屬性總是基於0開始編號的:

object FieldValue=reader[FieldName];

object FieldValue=reader[FieldIndexl;

可以把包含欄位名的字串傳入Item屬性,也可以把指定欄位索引的32位整數傳遞給Item屬性。

例如,如果命令是SQL select查詢:

Select ID, cName  from course

使用下面任意一種方法,都可以得到兩個被返回欄位的值:

object ID=reader ["ID"]

object cName=reader ["cName"];

或者:

object ID=reader[0];

object cName=reader [1];

另外需要注意的是,在使用資料時需要自己負責類型轉換,如下所示:

int ID=(int)reader[0];

String cName=(string)reader[1];

注意:如果類型轉換錯誤,例如將非數字類型轉化為整型,將會在運行時拋出異常。

Get方法

除了通過索引訪問資料外,DataReader類還有一群組類型安全的存取方法可以用於讀取指定列的值。

這些方法是以Get開頭的,並且它們的名稱具有自我解釋性。

例如GetInt32()、GetString()等。

這些方法都帶有一個整數型參數,用於指定要讀取列的編號。

每一個DataReader類都定義了一組Get方法,那些方法將返回適當類型的值。

例如,GetInt32方法把返回的欄位值作為32位整數。

每一個Get方法都接受欄位的索引,

例如在上面的例子中,使用以下的代碼可以檢索ID欄位和cName欄位的值:

int ID=reader. Getint32 (0);

string cName=reader. GetString(1);

執行個體示範DataReader

在這個例子中,將讀取所有的學生資訊並將其顯示出來。

(1)啟動Visual Studio,建立一個名為DataReaderTest的WindowsApplication項目。

(2)在Forml.cs的空白處雙擊滑鼠,進入Page—Load事件。Page_Load事件在頁面載入時執行。

(3)首先在Forml.cs中添加SqlClient的命名空間:

using System. Data. SqlClient;

(4)在Page_Load事件中添加如下代碼:

using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace DataReaderTest{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            //定義輸出訊息            string message="";            //建立連線物件            SqlConnection conn=new SqlConnection();            conn.ConnectionString="Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI";            //拼接命令字串            string selectQuery="select ID, sName,sGrade,sSex from studentInfo";            //建立命令對象            SqlCommand  cmd=new SqlCommand(selectQuery, conn);            conn.Open( );            //關閉閱讀器時將自動關閉資料庫連接            SqlDataReader reader=cmd. ExecuteReader(CommandBehavior.CloseConnection);            //迴圈讀取資訊            while (reader.Read())            {                message+="學號:"+reader[0].ToString()+" ";                message+="姓名:"+reader["sName"].ToString()+" ";                message+="班級:"+reader.GetString(2)+ " ";                message+="性別:"+reader.GetString(3)+" ";                message+="\n";            }            //關閉資料閱讀器            //無需關閉串連,它將自動被關閉            reader.Close();            //測試資料連線是否已經關閉            if(conn.State==ConnectionState.Closed)            {                message+="資料連線已經關閉\n";            }            MessageBox.Show(message);        }    }}

 

C#與資料庫訪問技術總結(十二)資料閱讀器(DataReader)2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.