关于ADO.NET的一个小问题,高手帮忙进来解释下
以下有两个方式但是结果都相同,请高手帮忙解释下,两种方式有什么差别
方式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();
}
}
}
}
[解决办法]
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自动断开联接
SqlDataReader 高效,功能弱,只读访问
[解决办法]