来源:http://blog.csdn.net/u013201439/article/details/51111969

        ADO五大对象(转载)

一、绪论

1、引言

在数据库应用系统中,必定要涉及到对数据库的访问和操作,而ADO.NET则是微软在.NET Framework中负责数据访问的类的库集,那么理清ADO.NET中的五大对象对于我们理解ADO.NET无疑会有很大的帮助。

本文将对ADO.NET做简单的介绍,分析五大对象Connection、Command、DataReader、DataAdapter、DataSet,以及他们之间的关系。

2、发展

早在1997年时,微软已经开发了许多的数据访问方式,例如DAO(Data Access Object)对象、可以跨越网络访问数据的RDO(Remote Data Objects)以及让DAO组件可以访问ODBC数据源的ODBCDirect技术等等。

如此多的技术,为了减少企业与开发人员在选择、学习与应用上产生的困难,同时适逢COM与OLE的发展,微软将数据访问的核心开始改写为以COM为主的OLE DB,并且在它上面创建一个新的数据访问模型ADO(ActiveX Data Objects)。

然而ADO本身的架构仍然有缺陷(尤其是在开发网络应用程序时,最好的例子就是Recordset无法脱机)。于是在1998年时,微软提出了一个下一代的应用程序开发框架(Application Framework)的项目,其中就包括Storage+,而ADO+就是Storage+的一支。

2000年的时候,微软的Microsoft .NET项目开始成形,许多的微软产品都冠上.NET的标签,ADO+也不例外,改名为ADO.NET,并包装到.NET Framework类库中,成为.NET平台中唯一的数据访问组件。

二、五大对象简介:

一图胜过千言万语,在对五个对象详细介绍之前,先用一张图来说明它们之间的关系:

1、Connection

建立与特定数据源的连接。 所有 Connection 对象的基类均为 DbConnection 类,是所有数据库操作的基础,在对数据库操作之前要先建立数据连接。

实例说明(仅以SqlConnection为例):
  string connectionString = "";//连接字符串
  SqlConnection connection = new SqlConnection(connectionString)//初始化 SqlConnection 类的新实例
  connection.Open();//打开数据库连接
  connection.Close();//关闭连接

使用connection连接的时候记得打开、关闭,建议使用using,确保连接始终关闭,这样可确保在代码退出代码块时自动关闭连接。
  using (SqlConnection connection = new SqlConnection(connectionString))
  {
    connection.Open();
  // ...
  }

2、Command

对象定义了将对数据源执行的指定命令。 表示要对数据库执行的一个 Transact-SQL 语句或存储过程。所有 Command 对象的基类均为 DbCommand 类。

3、DataReader

从数据源中读取只进且只读的数据流。 所有 DataReader 对象的基类均为 DbDataReader 类,DataReader对象只允许以只读、顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时DataReader对象还是一种非常节省资源的数据对象。

4、DataAdapter

DataAdapter对象充当DataSet和数据源之间用于检索和保存数据的桥梁。DataAdapter类代表用于填充DataSet以及更新数据源的一组数据库命令和一个数据库连接。表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet 和更新数据源。

5、DataSet

驻留于内存的数据集,可以看做是内存中的数据库,内部用XML来描述数据。 也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable), 独立于各种数据源。

三、增删改查应用

说明: 这里将对数据库的操作大致分为两类,一类是对数据库的查询,需要返回查询数据。一类是对数据库的增、删、改,不需要返回查询数据。下面就以这两类,结合实例说明。

1、查询:从上图中可以看到,想得到查询结果有三种方式:

通过Command对象的ExecuteScalar方法(),但是这种方法只能返回由查询返回的结果集中的第一行的第一列,并且其返回值为object类型,其他列或行将被忽略。
ExecuteScalar()经常使用于当需要返回单一值时的情况。例如你刚插入一行数据,想要立即知道它的ID号,则可以使用ExecuteScalar()方法。通过MSDN给出的一个例子说明。
  static public int AddProductCategory(string newName, string connString)
  {
    Int32 newProdID = 0;
    string sql = "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "+ "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
      SqlCommand cmd = new SqlCommand(sql, conn);
      cmd.Parameters.Add("@Name", SqlDbType.VarChar);
      cmd.Parameters["@name"].Value = newName;
      try
      {
        conn.Open();
        newProdID = (Int32)cmd.ExecuteScalar();
      }
      catch (Exception ex)
      {
      Console.WriteLine(ex.Message);
      }
    }
    return (int)newProdID;
 }

通过DataReader对象接收Command对象的ExecuteReader方法()的返回值,DataReader从数据库中检索只读、只进的数据流。
使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。下面是MSDN实例。
  private static void ReadOrderData(string connectionString)
  {
    string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";//sql语句
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand command = new SqlCommand(queryString, connection);
      connection.Open();
      SqlDataReader reader = command.ExecuteReader();
      try
      {
        while (reader.Read())
        {
        Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
         }
      }
      finally
      {
        // 读完数据后,调用关闭
        reader.Close();
      }
  }
}

通过DataAdapter对象将查询到的数据填充到DataSet中。
  private void Button_Click(object sender, RoutedEventArgs e)
  {
    string conStr = "";//连接字符串
    using (SqlConnection conn = new SqlConnection(conStr))
     {
      conn.Open();//打开连接
      string sql = "";//sql语句
      SqlDataAdapter sda = new SqlDataAdapter(sql,conn);//实例化SqlDataAdapter对象
      DataSet ds = new DataSet();
      sda.Fill(ds);//填充数据集
    }
  }

2、添加、修改、删除,从上图中可以看到,有两种方式:

通过Command对象的ExecuteNonQuery 方法 (),可以使用 ExecuteNonQuery来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句。
  private static void CreateCommand(string queryString,string connectionString)
  {
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand command = new SqlCommand(queryString, connection);
      command.Connection.Open();
      command.ExecuteNonQuery();
    }
   }

使用DataSet来更数据库中的数据。
  static private DataSet UpdateDataSet(string connectionString)
  {
    DataSet dataSet = new DataSet();//实例化数据集dataset
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
      connection.Open();//打开连接
      SqlDataAdapter adapter = new SqlDataAdapter();//实例化SqlDataAdapter对象
      SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
      adapter.Fill(dataSet);//填充数据集dataset
      dataSet.Tables[0].Rows[0][0] = 2;//修改数据
      adapter.Update(dataSet);//更新dataset
    }
    return dataSet;
  }

更多详情可在实践过程中F12查看注释和写Demo。

https://msdn.microsoft.com/zh-cn/library/

参考资料:

https://zh.wikipedia.org/wiki/ADO.NET

https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

http://developer.51cto.com/art/201005/198221.htm

ADO五大对象(转载)的更多相关文章

  1. ADO五大对象

     ADO.NET五大对象, 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只 ...

  2. ADO.NET五大对象理论和实践(草稿)

    一.ADO.NET五大对象理论 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. Command对象在执行的的时候有几个比较重要的方法,如Exe ...

  3. 数据库学习之ADO.NET五大对象

    1 [ADO.NET]      ado.net 是一种数据访问技术,使得应用程序能够连接到数据存储,并以各种方式操作存储在里面的数据.    2 [ADO.NET五大常用对象]     Connec ...

  4. ADO.NET的五大对象

    ADO.NET是一种数据访问技术,使得应用程序可以连接到数据库存储,并以各种方式操作存储在其中的数据.该技术基于.NETFramework,与.NET Framework类库的其余部分高度集成. 其中 ...

  5. ado.net五大对象

    五大对象分别是: 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只读.顺向的 ...

  6. ADO.NET 对象

    (一)OleDbConnection 使用COM组件链接 (二)ADO.NET 对对数据库访问做了优化: 1.SqlConnection 用于建立和Sql Server服务器连接的类,表示打开数据库 ...

  7. javascript--BOM(browser object model)五大对象

    浏览器对象模型: 作用:访问.控制.修改浏览器,与浏览器进行交互(打开新的窗口.回退历史记录.获取url) BOM与的DOM区别:JS通过BOM与浏览器进行交互.BOM的window对象包含了docu ...

  8. 一文回顾Reids五大对象(数据类型)

    Redis 是一个高性能的分布式内存型数据库,在国内外各大互联网公司中都有着广泛的使用,即使是一些非互联网公司中也有着非常重要的适用场景,所以对 Redis 的掌握也成为后端工程师必备的基础技能,在面 ...

  9. ADO.NET中的五大对象

    Connection connection 对象主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取到数据的.这个物件是ADO.NET的最底层,我们可以自己产生这个对象, ...

随机推荐

  1. iis 中https修改主机名方法

    来源地址:  https://www.pianyissl.com/support/page/29

  2. Day 24 继承

    # 一.什么是继承 # 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可成为基类或超类,新建类称为派生类或子类.# python中类的继承分为:单继承和多继承cla ...

  3. 廖雪峰Python学习笔记——使用元类

    元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...

  4. Code Chef TSUM2(动态凸包+点分治)

    题面 传送门 题解 真是毒瘤随机化算法居然一分都不给 首先这种树上的题目一般想到的都是点分 我们考虑如何统计经过当前点的路径的贡献,设当前点\(u\)在序列中是第\(c\)个,那么一条路径的贡献就是 ...

  5. 解决Windows 8.1 应用商店中安装程序挂起的解决

    阅读目录: 在Windows 8.1系统的应用程序商店中安装程序时,总是提醒“挂起”状态.无法进行后续安装,看了下国内不少用户有这个困扰,特此总结自己的解决方案. 1. 确保Windows updat ...

  6. JS-DOM Element方法和属性

    JS-DOM Element方法和属性 S-DOM Element方法和属性一,获取html元素1.getElementByID(id)通过对元素的ID访问,这是DOM一个基础的访问页面元素的方法.e ...

  7. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  8. VSTO学习(六)——创建Outlook解决方案

    本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案的,所以本专题中将为大家介绍下Outlook相关的内容.我 ...

  9. kafka 消费者offset记录位置和方式

    我们大家都知道,kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同. 首先来说说消费者如果是根据javaapi来消费,也就是[kafka.jav ...

  10. 深入理解Java虚拟机:第2章 Java内存区域与内存溢出异常

    目录 2.2 运行时数据区域 Java堆 方法区 虚拟机栈 本地方法栈 程序计数器 2.3 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位   2.2 运行时数据区域 Jav ...