以下有两个方式但是结果都相同,请高手帮忙解释下,两种方式有什么差别方式1using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断页面是否初次加载
if(!Page.IsPostBack)
{
//创建连接字符串
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
//创建连接对象
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open(); //创建执行对象
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from studentinfo"; SqlDataReader dr = cmd.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
if(conn.State==ConnectionState.Open)
{
conn.Close();
}
}
}
}方式2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断页面是否初次加载
if(!Page.IsPostBack)
{
//创建连接字符串
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
//创建连接对象
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open(); //创建DataAdater对象
SqlDataAdapter ad = new SqlDataAdapter("Select * from Studentinfo",conn);
//填充Set对象
DataSet ds = new DataSet();
ad.Fill(ds); //对GridView对象绑定数据源
GridView1.DataSource = ds;
GridView1.DataBind();
if(conn.State==ConnectionState.Open)
{
conn.Close();
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断页面是否初次加载
if(!Page.IsPostBack)
{
//创建连接字符串
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
//创建连接对象
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open(); //创建执行对象
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from studentinfo"; SqlDataReader dr = cmd.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
if(conn.State==ConnectionState.Open)
{
conn.Close();
}
}
}
}方式2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断页面是否初次加载
if(!Page.IsPostBack)
{
//创建连接字符串
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
//创建连接对象
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open(); //创建DataAdater对象
SqlDataAdapter ad = new SqlDataAdapter("Select * from Studentinfo",conn);
//填充Set对象
DataSet ds = new DataSet();
ad.Fill(ds); //对GridView对象绑定数据源
GridView1.DataSource = ds;
GridView1.DataBind();
if(conn.State==ConnectionState.Open)
{
conn.Close();
}
}
}
}
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自动断开联接
SqlDataReader 高效,功能弱,只读访问
什么情况适合SqlDataAdapter 举个例子
SqlDataAdapter 强大,要求资源也大一点SqlDataReader 只能在保持跟数据库连接的状态下才可以读取
SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。两者区别主要是在线和离线的区别很显然,如果只是显示数据,数据量不大当然要用这个SqlDataReader否则用SqlDataAdapter
http://www.cnblogs.com/WizardWu/archive/2008/07/15/1243661.htmlDataReader 程序性能优化
http://www.cnblogs.com/WizardWu/archive/2010/02/16/1668769.htmlADO.NET 文章:
http://www.cnblogs.com/WizardWu/category/141970.html
SqlDataAdapter 将数据放到DataSet中 是无连接的
SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点
SqlDataAdapter面向非连接,说到他不得不提dataset ,他相当于在内存维护一个小型数据库,在实时性要求不高的情况下,你可以先把数据从数据库下载到本地,处理后再连接到服务器,完成同步。
什么情况适合SqlDataAdapter 举个例子DataAdapter和DataSet相当于在内存里建了一个数据库,因此数据关系可以很复杂,但是数据量不能太大。还有一个好处是在DataSet里对数据进行的操作,可以更新到原来的数据库里。比如你查看某个用户的订单情况,修改价格和数量,保存修改,使用DataSet就比较好。而SqlDataReade的运行特点是单方向的、只读的,适用于数据量大、简单浏览检索的情况。
SqlDataReader 高效,功能弱,适合数据量较小,只读访问
SqlDataAdapter 强大,要求资源也大一点SqlDataReader 只能在保持跟数据库连接的状态下才可以读取
SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。两者区别主要是在线和离线的区别很显然,如果只是显示数据,……学习了。。
在决定应用程序应使用 DataReader(请参见使用 DataReader 检索数据 (ADO.NET))还是应使用 DataSet(请参见使用数据集 (ADO.NET))时,应考虑应用程序所需的功能类型。 使用 DataSet 可执行以下操作:在应用程序中将数据缓存在本地,以便可以对数据进行处理。 如果只需要读取查询结果,则 DataReader 是更好的选择。在层间或从 XML Web 服务对数据进行远程处理。与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。如果不需要 DataSet 所提供的功能,则可以通过使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。 虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参见从 DataAdapter 填充数据集 (ADO.NET)),但使用 DataReader 可以提升性能,因为这样可以节省 DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。