複習ADO.NET的ExecuteReader()方法
ExecuteReader() 方法
解釋1:將SQL語句傳送到指定連線 生成一個SqlDataReader物件
解釋2:當ExecuteReader()執行後返回一個SqlDataReader物件
兩種解釋實際上都在說明些方法就是給SqlDataReader物件一個可以訪問查詢到的結果的渠道。
程式執行分析
1、首先需要new一個SqlDataReader物件。接收ExecuteReader()執行後返回的SqlDataReader物件。
2、SqlDataReader的HasRows屬性可以判斷SqlDataReader中是否有(一行或多行)資料,返回bool值,有資料時為true,程式向下執行,開始進入讀取資料環節。
3、SqlDataReader的Read方法可以使SqlDataReader前進到下一條記錄,同樣返回bool值,當下一條無記錄返回false,則表示記錄讀取完畢;當下一條有資料時為true,將讀取到的資料(當前的一條記錄)暫存在SqlDataReader中。
4、SqlDataReader的一系列get方法可以獲取SqlDataReader中不同型別的值,儲存到指定的變數中。
注:get方法引數為列數,即第幾列。
還有一點很重要,DataReader必須保證SqlConnection處於連線狀態。
練習:
從SQL Server資料表Student中讀取所有記錄列印到螢幕:
class Program{
static void Main(string[] args)
{
string constr = @"server=.\SQLEXPRESS;database=MyDataBase;uid=sa;pwd=sa";
//string constr = @"server=.\SQLEXPRESS;database=MyDataBase;Integrated Security=True";
using (SqlConnection sqlconn = new SqlConnection(constr))
{
string cmdstr = @"select * from Student";
using (SqlCommand cmd = new SqlCommand(cmdstr, sqlconn))
{
if (sqlconn.State == ConnectionState.Closed)
{
sqlconn.Open();
}
SqlDataReader reader= cmd.ExecuteReader();
if (reader.HasRows)//HasRows判斷reader中是否有資料
{
while(reader.Read()) //Read()方法讀取下一條記錄,如果沒有下一條,返回false,則表示讀取完成
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string gender = reader.GetBoolean(3) == true ? "男" : "女"; //運用了三元表示式
int age = reader.GetInt32(2);
Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n",id,name,gender,age);
}
Console.ReadKey();
}
}
}
}
}
//reader的第二種輸出(遍歷)方式,使用索引,效率會稍微低點,因為通過索引得到的為物件(object)
//while (reader.Read())
//{
// Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader[0], reader[1], reader[2], reader[3]);
//}
//第三種,也是索引 ,方括號內指定資料庫中的列名
//while (reader.Read())
//{
// Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader["sId"], reader["sAge"], reader["sName"], ((bool)reader["sGender"] == true ? "男" : "女"));
//}
//第二種輸出方式,使用索引,效率會稍微低點,因為通過索引得到的為物件(object)
//while (reader.Read())
//{
// Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader[0], reader[1], reader[2], reader[3]);
//}
//第三種,也是索引 ,方括號內指定資料庫中的列名
//while (reader.Read())
//{
// Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader["sId"], reader["sAge"], reader["sName"], ((bool)reader["sGender"] == true ? "男" : "女"));
//}