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