zoukankan      html  css  js  c++  java
  • Ado.net中DataSet和SqlDataReader的区别

    http://www.tuicool.com/articles/mYRbAz

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

    using (SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=123456"))
          {
            conn.Open();
            using (SqlCommand cmd = conn.CreateCommand())
            {
              // 输入  1' or '1'='1  会造成SQL注入漏洞
               // cmd.CommandText = "select age from T_STudent where Name='"+txtName.Text+"'";
              cmd.CommandText = "select age from T_Student where Name=@Name or Age>@aaa";
              cmd.Parameters.Add(new SqlParameter("@Name", txtName.Text));
              cmd.Parameters.Add(new SqlParameter("@aaa"
                , Convert.ToInt32(txtAGe.Text)));
              //insert into ....  values(@Name,@Age)
              //delete .... where Id=@HahahId
              //update t1 set Age=@myage
              //@参数不能用来替换表名、字段名、select之类的关键字等
              //cmd.CommandText = "select age from @TableName";
              //cmd.Parameters.Add(new SqlParameter("@TableName", "T_Student"));
              //cmd.Parameters.Add(new SqlParameter("@Name", txtName));//初学者不要写错成这样
              using (SqlDataReader reader = cmd.ExecuteReader())
              {
                while (reader.Read())
                {
                  //GetInt32获得的是int类型
                  //GetInt64获得的是long类型(数据库中是bigint)
                  int age = reader.GetInt32(0);
                  MessageBox.Show(age.ToString());
                }
              }
            }
          }
    using (SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=123456"))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
               <span style="white-space:pre">	</span>   {
                        cmd.CommandText = "select * from T_Student where Age<@aaa";
                        cmd.Parameters.Add(new SqlParameter("@aaa", 60));
                        //cmd.ExecuteReader(
    
                        //SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet
                      //中的类
                        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                        //DataSet相当于本地的一个复杂集合(List<int>)
                        DataSet dataset = new DataSet();
                        adapter.Fill(dataset);//执行cmd并且把SqlCommand查询结果填充到DataSet
                        DataTable table = dataset.Tables[0];
                        DataRowCollection rows = table.Rows;
                        for (int i = 0; i < rows.Count; i++)
                        {
                            DataRow row = rows[i];
                            int age = (int)row["Age"];
                            string name = (string)row["Name"];
                            MessageBox.Show(name + "," + age);
                        }
                    }
  • 相关阅读:
    Javascript实现局部刷新
    Javascript模块化开发-轻巧自制
    javascript面向对象实例
    Javascript兼容和CSS兼容总结
    隐藏关机按钮
    数组排序
    常用数组获取最新和第一个元素值
    php 操作redis 以及几个常用命令
    git 常用命令
    JSON.parse和JSON.stringify的区别
  • 原文地址:https://www.cnblogs.com/cylblogs/p/5211295.html
Copyright © 2011-2022 走看看