Ado.net中DataSet和SqlDataReader的区别

概述:

一,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 [email protected] 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 [email protected]
                    //update t1 set [email protected]
                    //@参数不能用来替换表名、字段名、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);
                    }
                }

Ado.net中DataSet和SqlDataReader的区别,布布扣,bubuko.com

时间: 2024-12-25 11:45:54

Ado.net中DataSet和SqlDataReader的区别的相关文章

ADO.Net中DataSet的应用

一.知识点描述 1.DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.也就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的. 2.创建和刷新 DataSet 并依次更新原始数据的步骤: 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable. 通过添加.更新或删除 DataRow 对象更改单个 DataTable 对象中的数据. 调用 DataAdap

浅谈ADO.NET中的对象——Connection、Command、DataReader、DataAdapter、DataSet、DataTable

可能是当初没有好好总结的缘故,学习.NET以来,对ADO.NET中的对象一直有些模糊,今天重新回顾了一下,通过查资料,总结,结合自己的观点整理一下ADO.NET中Connection.Command.DataReader.DataAdapter. DataSet.DataTable这几个对象的相关知识,希望对初学者能起到一个全局把控的作用,希望大牛能留下宝贵的指导意见. 以下的例子仅以连接 SQL Server数据库为例,所以分别以SqlConnection.SqlCommand.SqlData

ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用. Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询.新增.修改.删除数据等指令,以及调用存在数据库中的存储过程等.这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源. DataAdapter:主要是在数据源以及DataSet 

ADO.NET之DataSet类

DataSet相当于一个小型数据库,通过它可以管理数据和关系 1.将sql代码的返回结果填充到该类中,然后从该类中读取,显示.(类似于Sqldatareader类) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; nam

[翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 原文链接:https://msdn.microsoft.com/en-us/library/ms978388.aspx 概要:在典型的应用环境中,比较不同数据访问技术的表现性能.适用于Microsoft .NET Framework Beta2 和 Microsoft SQL Server 2000

ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法

1.ExecuteNonQuery方法.该方法执行更新操作,即与UPDATE.INSERT.DELETE等语句有关的操作,在这种情况下,返回值是命令影响的行数.对其他语句,如SET或CREATE,则返回-1,如果发生回滚,返回值也是-1. 2.ExcuteReader方法.它与查询命令一起使用,返回一个数据阅读器对象SqlDataReader类的一个实例.该方法执行更新语句,执行成功后,不会返回任何受影响的数据行. 3.ExecuteScalar方法.如果只想检索数据库信息中的已个值,而不需要返

[转载]ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用. Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询.新增.修改.删除数据等指令,以及调用存在数据库中的存储过程等.这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源. DataAdapter:主要是在数据源以及DataSet 

ADO.NET中的模型及对象

一.ADO.NET中的模型及对象 1.EexcuteNonQuery------>实现非查询操作(增删改) sql语句查询非参数化 //连接字符串 string conStr = @"server=.;database=MyDataBase;uid=sa;pwd=sa"; //要执行的sql语句 string sql = "insert into MyDataBase(Id,Name,Age,Sex) values(1,'曹操',500,'m')"; //创建

ADO.NET中的5个主要对象

1.Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的. Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用. 2.Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询.新增.修改.删除数据等指令,以及调用存在数据库中的存储过程等. 这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源. 3.DataAdapter:主要是在数据源以及