C# sqladapter 與sqldataReader

ADO.NET提供了豐富的數據庫操做,在這些操做中SqlConnection和SqlCommand類是必須使用的,但接下來能夠分爲兩類操做:html

第一類是用SqlDataReader直接一行一行的讀取數據庫。mysql

第二類是SqlDataAdapter聯合DataSet來讀取數據。sql

下面經過兩個子程序,來看看它們的用法:數據庫

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"));
                                                                     

                        }
                                              

                    }

                }

            }

        }

複製代碼ide

接下來是SqlDataAdapter:函數

SqlDataAdapter spa

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);

                     }              
                 }
             }
        }

複製代碼.net

      經過這兩個事件的代碼,咱們能夠看出,也符合前面說的規則:這兩種讀取數據的方法都須要SqlConnection和SqlCommand類的使用。它們的最大的區別是數據源不一樣:code

      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

相關文章
相關標籤/搜索