復習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中讀取所有記錄打印到屏幕:

 

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             string constr = @"server=.\SQLEXPRESS;database=MyDataBase;uid=sa;pwd=sa";
 6             //string constr = @"server=.\SQLEXPRESS;database=MyDataBase;Integrated Security=True";
 7 
 8             
 9 
10             using (SqlConnection sqlconn = new SqlConnection(constr))
11             {
12                 string cmdstr = @"select * from Student";
13                 using (SqlCommand cmd = new SqlCommand(cmdstr, sqlconn))
14                 {
15                     if (sqlconn.State == ConnectionState.Closed)
16                     {
17                         sqlconn.Open();
18                     }
19                     SqlDataReader reader= cmd.ExecuteReader();
20 
21                     if (reader.HasRows)//HasRows判斷reader中是否有數據
22                     {
23                         while(reader.Read())  //Read()方法讀取下一條記錄,如果沒有下一條,返回false,則表示讀取完成
24                         {
25                             int id = reader.GetInt32(0);
26                             string name = reader.GetString(1);
27                            string  gender = reader.GetBoolean(3) == true ? "" : ""; //運用了三元表達式
28                             int age = reader.GetInt32(2);
29 
30                             Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n",id,name,gender,age);
31                         }
32 
33                         Console.ReadKey();
34                     }
35                 
36                 }
37 
38             }
39         }
40     }
 1                    //reader的第二種輸出(遍歷)方式,使用索引,效率會稍微低點,因為通過索引得到的為對象(object)
 2                         //while (reader.Read())  
 3                         //{
 4                            
 5                         //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader[0], reader[1], reader[2], reader[3]);
 6                         //}
 7                         //第三種,也是索引 ,方括號內指定數據庫中的列名
 8                         //while (reader.Read())
 9                         //{
10 
11                         //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader["sId"], reader["sAge"], reader["sName"], ((bool)reader["sGender"] == true ? "男" : "女"));
12                         //}

 

 //第二種輸出方式,使用索引,效率會稍微低點,因為通過索引得到的為對象(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 ? "男" : "女"));
                        //}


免責聲明!

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



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