首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于ADO.NET的一个小疑点,高手帮忙进来解释下

2013-04-21 
关于ADO.NET的一个小问题,高手帮忙进来解释下以下有两个方式但是结果都相同,请高手帮忙解释下,两种方式有

关于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 高效,功能弱,只读访问

[解决办法]

引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自……

说得相当对
[解决办法]
SqlDataReader 高效,功能弱,适合数据量较小,只读访问
SqlDataAdapter 强大,要求资源也大一点

SqlDataReader 只能在保持跟数据库连接的状态下才可以读取。。。
SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。

两者区别主要是在线和离线的区别

很显然,如果只是显示数据,数据量不大当然要用这个SqlDataReader否则用SqlDataAdapter

[解决办法]
适时调整 SqlDataSource 控件的 DataSourceMode 属性 
http://www.cnblogs.com/WizardWu/archive/2008/07/15/1243661.html

DataReader 程序性能优化 
http://www.cnblogs.com/WizardWu/archive/2010/02/16/1668769.html

ADO.NET 文章:
http://www.cnblogs.com/WizardWu/category/141970.html

[解决办法]
我是很少用SqlDataAdapter
------解决方案--------------------


SqlDataReader 是连接一直存在的
SqlDataAdapter 将数据放到DataSet中 是无连接的
[解决办法]
SqlDataReader //基于连接,只读访问 效率高,如果只是显示的话建议用这个
SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点

[解决办法]

引用:
引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdap……

补充下SqlDataReader是面向连接的,实时性高。比如订票系统,都用的是这种
SqlDataAdapter面向非连接,说到他不得不提dataset ,他相当于在内存维护一个小型数据库,在实时性要求不高的情况下,你可以先把数据从数据库下载到本地,处理后再连接到服务器,完成同步。
[解决办法]
那请问什么情况适合用SqlDataReader
什么情况适合SqlDataAdapter 举个例子

DataAdapter和DataSet相当于在内存里建了一个数据库,因此数据关系可以很复杂,但是数据量不能太大。还有一个好处是在DataSet里对数据进行的操作,可以更新到原来的数据库里。

比如你查看某个用户的订单情况,修改价格和数量,保存修改,使用DataSet就比较好。

而SqlDataReade的运行特点是单方向的、只读的,适用于数据量大、简单浏览检索的情况。



[解决办法]
才鸟,哈好学习吧
[解决办法]
经过,做个标记
[解决办法]
引用:
SqlDataReader 高效,功能弱,适合数据量较小,只读访问
SqlDataAdapter 强大,要求资源也大一点

SqlDataReader 只能在保持跟数据库连接的状态下才可以读取。。。
SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。

两者区别主要是在线和离线的区别

很显然,如果只是显示数据,……


学习了。。
[解决办法]
引用:
SqlDataReader 高效,功能弱,适合数据量较小,只读访问
SqlDataAdapter 强大,要求资源也大一点

SqlDataReader 只能在保持跟数据库连接的状态下才可以读取。。。
SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。

两者区别主要是在线和离线的区别

很显然,如果只是显示数据,……



学习了。。
[解决办法]
引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自动……

up
[解决办法]
Fresh man.
[解决办法]
引用:
引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdap……

up
[解决办法]
不要用SqlDataReader直接绑定控件,这样很影响效率。

因为 SqlDataReader 就好像打电话,不绑定完毕,电话是不会挂断的。你在打电话,其他人就不能用了。

如果你长时间占用电话线,那么就会影响其他人的使用。

而SqlDataAdapter会把需要的数据,装载到DataTable里。这样就不会长期占用数据库连接了。节省了数据库连接的资源。


[解决办法]
新手学习了。。。。。。。。。。
[解决办法]
认真学习了~
[解决办法]
新手,这实例有用。
------解决方案--------------------


引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自动……

up
[解决办法]
引用:
SqlDataReader返回的是一个数据读写器
SqlDataAdapter返回的是数据集,读取数据后将数据集放入DataSet,DataSet 的数据存在本地内存
SqlDataReader执行前须先打开数据库,然后须生成一个COMMAND对象;再由COMMAND.EXECUTEREADER()方法赋值完成后须手动关闭联接。
SqlDataAdapter 执行时,自动打数据库,完成后自动……


相当对。
[解决办法]
SqlDataAdapter 是断开式连接,填充到数据库后自动关闭,而且可以一次性提交多张表多行数据

SqlDataReader  是非断开式连接,需要手动关闭数据库连接

建议使用SqlDataAdapter 

LZ也可以试着使用LINQ来对数据进行操作,这个比较简单

热点排行