A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘安成 中级黑马   /  2013-12-24 04:41  /  1598 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘安成 于 2013-12-24 21:32 编辑

ADO.NET中数据库连接的两种模式的区别?

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

4 个回复

倒序浏览
1.  连接模式:利用DataReader对象实现数据库连接模式;
2.  断开模式:利用DataAdapter对象实现数据库断开模式;

3.  DataReader只能向前的只读游标, DataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,DataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存几乎没有影响。
4. DataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。


评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
这两种模式使用上有区别,除此之外,我觉得都是相同的。
<configuration>
  <appSettings>
    <add key="ConnectionString" value="server=.;database=ADO.NET;uid=sa;pwd=***"/>
  </appSettings>
  <connectionStrings>
    <add name="ConStr" connectionString="server=.;database=ADO.NET;uid=sa;pwd=***"/>
  </connectionStrings>
</configuration>

使用方法:添加配置文件,添加引用System.comfiguration

  //public string con=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];

       public string con=System.Configuration.ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;

评分

参与人数 1黑马币 +9 收起 理由
V_John + 9 鼓励鼓励

查看全部评分

回复 使用道具 举报
ADO.NET(ActiveX Data Objects)大家都很熟悉,顾名思义用来访问数据库,.NET环境下首选的数据库访问接口。
   访问数据库ADO.NET提供了两种模式:连接模式和断开模式。在说他们的区别之前用几张图来概括应用程序的运行机制和过程:
                          图1:整个应用程序的运行机制
     
                        图2:数据库连接机制
   
                                                                             图3:ADO.NET 对象
                                
                 

       通过上面三张图我们看到ADO.NET对象在应用程序和数据库间扮演者“桥梁”角色。DataSet和DataTable可以看做是数据容器。访问数据库的速度直接影响到应用程序的执行效率,ADO.NET 提供了两种数据库连接模式:
        1. 连接模式:利用DataReader对象实现数据库连接模式:
       代码如下:
[csharp] view plaincopy


  • public partial class DataRead : System.Web.UI.Page  
  •     {  
  •         protected void Page_Load(object sender, EventArgs e)  
  •         {  
  •             string str = "server=localhost;uid=sa;pwd=123456;database=DataTest";  
  •             SqlConnection conn = new SqlConnection(str);  
  •             SqlCommand cmd = new SqlCommand("select * from student", conn);  
  •             conn.Open();  
  •             SqlDataReader rdr = cmd.ExecuteReader();  
  •             DataTable table = new Datable();  
  •             table.Load(rdr);  
  •             rdr.Close();  
  •             conn.Close();  
  •         }  
  •     }  

[csharp] view plaincopy


  • <span style="font-size:18px;">  </span>  

       2. 断开模式:利用DataAdapter对象实现数据库断开模式:
       代码如下:
      
[csharp] view plaincopy


  • public partial class DataRead : System.Web.UI.Page  
  •     {  
  •         protected void Page_Load(object sender, EventArgs e)  
  •         {  
  •             string str = "server=localhost;uid=sa;pwd=123456;database=DataTest";  
  •             SqlConnection conn = new SqlConnection(str);  
  •             string sql = "select * from student";  
  •             SqlDataAdapter adp = new SqlDataAdapter(sql, conn);//Adepter对象  
  •             DataSet ds = new DataSet();//DataSet对象  
  •             adp.Fill(ds, "stu");//填充DataSet 并为当前表命名  
  •             DataTableReader rdr = ds.CreateDataReader();  
  •             while (rdr.Read())//读取表中数据  
  •             {  
  •                 Response .Write("第n条数据");  
  •             }  
  •         }  
  •     }  



总结:
  • 数据库连接两种模式的区别:
        SqlDataReader从字面上看数据读取,在读取数据的过程中一直与数据库保持连接,适合数据量小的情况,执行效率还是可以的。
        SqlDataAdapter(数据适配器)可以说建立一个"本地数据库"--DataSet,先将数据取出来放到dataset中,然后就可以关闭数据库了,通过sqldataadapter还可以更新删除数据库中的东西,可以通过封装的Update等方法同步到数据库。
        两种模式都可以搭配DataSet和DataTable使用。
  • 两种模式的适用范围:

        数据量小,只读的情况下优先选择DataReader
        数据量大,需要绑定数据远的情况下,需要修改数据同时更新到数据库,选择DataAdapter
没有那种模式是绝对的,根据自己的需要情况,各取所需,这样节省资源,提高效率,达到事半功倍的效果。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
feichang 感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马