c# sqladapter 與sqldataReader

 

ADO.net提供了豐富的數據庫操作,在這些操作中SqlConnection和SqlCommand類是必須使用的,但接下來可以分爲兩類操作:

第一類是用SqlDataReader直接一行一行的讀取數據庫。
第二類是SqlDataAdapter聯合DataSet來讀取數據。
下面通過兩個子程序,來看看它們的用法:
SqlDataReader
private void button1_Click(object sender, EventArgs e)
        {
            string cnn_char = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True";
            using (SqlConnection conn = new SqlConnection(cnn_char))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Select * from T_User where UserName=@User";
                    cmd.Parameters.Add(new SqlParameter("User",textUserName.Text));
                    using(SqlDataReader reader=cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            int errorTimes = reader.GetInt32(reader.GetOrdinal("ErrorTimes"));
                                                                     

                        }
                                              

                    }

                }

            }

        }

接下來是SqlDataAdapter:

SqlDataAdapter
private void button3_Click(object sender, EventArgs e)
        {
             string cnn_char = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True";
             using (SqlConnection conn = new SqlConnection(cnn_char))
             {
                 conn.Open();
                 using (SqlCommand cmd = conn.CreateCommand())
                 {
                     cmd.CommandText = "Select * from T_User";
                     DataSet dataset = new DataSet();
                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);//將SqlCommand與SqlDataAdapter綁定
                     adapter.Fill(dataset);
                     DataTable table = dataset.Tables[0];
                     foreach(DataRow row in table.Rows)
                     {
                         string name=Convert.ToString(row["UserName"]);
                         MessageBox.Show(name);

                     }              
                 }
             }
        }

      通過這兩個事件的代碼,我們可以看出,也符合前面說的規則:這兩種讀取數據的方法都需要SqlConnection和SqlCommand類的使用。它們的最大的區別是數據源不同:

      SqlDataReader的數據源在數據庫服務器上,對於程序而言,它在數據庫服務器上設置了一個遊標,指向一行數據,用Read()方法來對遊標進行判斷,當它返回false時,表示查詢的數據已取完。因此,它適合數據量比較大的時候的讀取,因爲它不佔內存,數據在數據庫服務器中。它的缺點在於,當數據庫服務連接斷開時,不能再進行數據的讀取了。

      SqlDataAdapter的方式,數據源在內存中,用一個數據集DataSet類的實例進行存儲。SqlDataAdapter相當於是一個橋樑,將數據庫服務器中的數據讀取到內存中,它的Fill( )方法完成了這個過程。因此,對於小量的數據,它的一個優點還在於,即使當服務器連接斷開時,也能繼續讀取數據。

       繼續說一說SqlDataAdapter。由於SqlDataAdapter是橋樑,因此需要與一個SQL命令綁定,所SqlDataAdapter對象有一個SelectCommand屬性。可以在創建SqlDataAdapter時作爲參數寫入構造函數中,也可以在創建實例後,賦給SelectCommand屬性。dataset有集合Tables,對於每一個DataTable,有集合Rows。對於每一行row,可以使用row["列名"]來獲得數據,注意row[]索引出來的是object對象,因此需要顯式的轉換。

出處:http://www.cnblogs.com/wxhpy7722/archive/2011/08/27/2155503.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章