標籤: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