A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侍小波 中级黑马   /  2012-9-25 16:51  /  1615 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

SqlDataReader和SqlDataAdapter 区别
一,SqlDataReader //基于连接,只读访问 适合数据量较小。
      SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点
二,SqlDataAdapter 读取数据后将数据集放入DataSet ,DataSet 的数据存在本地客服机内存。
三,SqlDataReader返回的是一个数据读写器,只能一条条的读,操作起来不灵活,一般在只读的时候才用到。
     SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作
四,写法上不同:
     SqlDatReader执行前须先打开数据库,然后须生成一个COMMAND对象。再由COMMAND.EXECUTEREADER()方法赋值。完成后须手动关闭联接。
     SqlCommand cmd = new SqlCommand("select * from stu", conn);
            conn.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            。。。。。
            conn.close();
       SqlDataAdapter 执行时,自动打开数据库,且不用Command的ExecuteReader方法进行赋值,完成后自动断开联接。
            SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            adptr.Fill(ds, "stu");
实例:
1,运用SqlDataReader 读取数据
class DataReader
    {
        static void Main()
        {
            string str = "server=localhost;uid=sa;pwd=123;database=northwind";
            SqlConnection conn = new SqlConnection(str);
            SqlCommand cmd = new SqlCommand("select * from stu", conn);
            conn.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
             DataTable table=new Datable();
            table.Load(rdr);
             rdr.Close();
            conn.Close();
        }
2,运用SqlDataAdapter +DataSet 读取修改数据
    class SqlDataAdapter
    {
        static void Main()
        {
            string str = "server=localhost;uid=sa;pwd=123;database=northwind";
            SqlConnection conn = new SqlConnection(str);
            string sql = "select * from stu";
            SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);//Adepter对象
            DataSet ds = new DataSet();//DataSet对象
            adptr.Fill(ds, "stu");//填充DataSet 并为当前表命名
            DataTableReader rdr = ds.CreateDataReader();
            while (rdr.Read())//读取表中数据
            {
                for (int i = 0; i < rdr.FieldCount; i++)
                {
                    Console.Write(rdr.GetName(i) + "\t" + rdr.GetValue(i) + "\t");
                }
                Console.WriteLine();
            }
        }


评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

2 个回复

正序浏览
学习ing;
回复 使用道具 举报
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马