SqlDataAdapter和SqlDataReader区别

ADO.NET提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作:

第一类是用SqlDataReader直接一行一行的读取数据库。
第二类是SqlDataAdapter联合DataSet来读取数据。
下面通过两个子程序,来看看它们的用法:
1.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:

    <span style="font-family: verdana, 宋体, Arial; "></span><pre name="code" class="csharp">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);  
      
                         }                
                     }  
                 }  
            }</pre><br>  
    <p style="margin-top:5px; margin-right:auto; margin-bottom:5px; margin-left:auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:verdana,宋体,Arial; font-size:14px; line-height:24px">  
    通过这两个事件的代码,我们可以看出,也符合前面说的规则:这两种读取数据的方法都需要SqlConnection和SqlCommand类的使用。它们的最大的区别是数据源不同:</p>  
    <p style="margin-top:5px; margin-right:auto; margin-bottom:5px; margin-left:auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:verdana,宋体,Arial; font-size:14px; line-height:24px">  
          <span style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; color:rgb(255,0,255)"><span style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">SqlDataReader的数据源在数据库服务器上,对于程序而言,它在数据库服务器上设置了一个游标,指向一行数据,用Read()方法来对游标进行判断,当它返回false时,表示查询的数据已取完。因此,它适合数据量比较大的时候的读取,因为它不占内存,数据在数据库服务器中。它的缺点在于,当数据库服务连接断开时,不能再进行数据的读取了。</span></span></p>  
    <p style="margin-top:5px; margin-right:auto; margin-bottom:5px; margin-left:auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:verdana,宋体,Arial; font-size:14px; line-height:24px">  
    <span style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px; color:rgb(255,0,255)"><span style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; padding-top:0px; padding-right:0px; padding-bottom:0px; padding-left:0px">       
     SqlDataAdapter的方式,数据源在内存中,用一个数据集DataSet类的实例进行存储。SqlDataAdapter相当于是一个桥梁,将数据库服务器中的数据读取到内存中,它的Fill( )方法完成了这个过程。因此,对于小量的数据,它的一个优点还在于,即使当服务器连接断开时,也能继续读取数据。</span></span></p>  
    <p style="margin-top:5px; margin-right:auto; margin-bottom:5px; margin-left:auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:verdana,宋体,Arial; font-size:14px; line-height:24px">  
           继续说一说SqlDataAdapter。由于SqlDataAdapter是桥梁,因此需要与一个SQL命令绑定,所SqlDataAdapter对象有一个SelectCommand属性。可以在创建SqlDataAdapter时作为参数写入构造函数中,也可以在创建实例后,赋给SelectCommand属性。dataset有集合Tables,对于每一个DataTable,有集合Rows。对于每一行row,可以使用row["列名"]来获得数据,注意row[]索引出来的是object对象,因此需要显式的转换。</p>  
    <pre></pre>  
    <pre></pre>  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值