ADO.NET 概述

ADO.NET是改进的ADO数据访问模型用于开发可扩展应用程序。他是专门为可伸缩性、无状态和XML核心的web而设计的。
ADO.NET使用一些ADO对象,如ConnectionCommand对象,也引入了一些新对象。关键的新对象包括DataSetDataReader,和DataAdapter
这种改进的ADO.NET和之前的数据架构的重要区别在于存在一个对象--DataSet对象--这是独立的不同于任何的数据存储。正因为如此,DataSet功能能够作为独立的实体。你可以将DataSet理解为总是断开连接对他包含的数据源和目标一无所知的记录集,在DataSet内部,就像一个数据库一样,有表,列,关系,约束,视图等等。
DataAdapter是一种连接到数据库来填充DataSet的对象。然后,连接回数据库更新数据,基于DatSet拥有数据的操作操作。在过去,数据处理一直是基于连接的。现在,为了使多层应用更高效,数据处理正在转向基于消息的方式。这种处理方式的核心是DataAdapter,提供了在DataSet和数据源之间用于检索和保存数据的桥梁。它是通过对数据存储请求正确的SQL指令实现的。
基于XML的DataSet对象提供了一个统一的编程模型,以至于适用于所有的数据存储:结构型,关系型,和层级型。他是通过对数据源“一无所知”,并且用他持有的集合和数据类型表示数据做到的。无论DataSet内部是什么数据源,都是通过调用同一套标准API暴露DataSet和相关对象的。
当DataSet对数据源不可知的时候,托管提供程序享有详尽的具体信息。托管提供程序的作用是连接,填充,并从数据存储持久化DataSet。OLE DB和SQL Server .NET框架部分的数据提供程序(System.Data.OleDb和System.Data.SqlClient)提供了四个基本对象:Command对象,Connection对象,DataReader对象和DataAdapter对象。在本文剩下的内容里,我们会遇到DataSet的每个部分,并且解释OLE DB/SQL Server .NET数据提供程序是什么,以及如何使用它们进行编码。
下面的章节会给你介绍一些改进后的对象,和一些新的对象。这些对象是: 
  • Connections. 用于连接和管理针对数据库的事务。
  • Commands. 用于发出针对数据库的SQL指令。
  • DataReaders. 用于从SQL Server数据源读取只进流的数据记录。
  • DataSets. 用于针对结构型数据,XML数据和关系型数据的存储,远程处理和编程。
  • DataAdapters. 用于推送数据到DataSet,并针对数据库协调数据。
注意:当处理数据库连接的时候,有两种不同的选项:SQL Server .NET 数据提供程序(System.Data.SqlClient)和OLE DB .NET 数据提供程序(System.Data.OleDb)。在这些实例中我们会使用SQL Server .NET数据提供程序。这些被直接写入Microsoft SQL Server。OLE DB .NET数据提供程序常用于任一OLE DB 提供者(它使用OLE DB)
Connections

Connections用于和数据库“沟通”,并且被声明为特定的提供程序级别,例如SQLConnection。Commands扫描连接然后结果集以流的形式被返回,这种流可以被DataReader对象读取,或者推入DataSet对象。

下面的例子演示了如何创建一个连接对象。Connections可以通过调用Open方法被显式打开,或者使用DataAdapter的时候被隐式打开。

若要确保连接始终关闭,请在 using 块内部打开连接,如下面的代码段所示。 这样可确保在代码退出代码块时自动关闭连接。

using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();// Do work here; connection closed on following line.}

 
Commands
Commands包含提交到数据库的信息,特定于提供程序的类比如SQLCommand。一个命令可以是一个存储过程调用,一个UPDATE语句,或者一个返回结果的语句。你也可以使用输入和输出参数,返回值作为命令的一部分。下面的示例演示了如何对Northwind数据库执行一条INSERT语句。
示例

下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。 该示例读取所有数据,并将其写到控制台。 最后,示例在退出 Using 代码块时先后关闭 SqlDataReader 和 SqlConnection。

private static void ReadOrderData(string connectionString)
{string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";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{// Always call Close when done reading.
            reader.Close();}}
}

 
DataReaders
DataReader对象有点类似一种只读/只进的数据游标。DataReader API不但支持平级数据而且支持层级数据。数据库执行一条命令后会返回一个DataReader对象。返回的DataReader对象格式不同于一个记录集。比如,你可以在一个web页面使用DataReader显示搜索结果列表。
 

下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。 该示例读取全部数据,并将这些数据写到控制台窗口。 随后此代码关闭 SqlDataReader。 SqlConnection 在 using 代码块的结尾处自动关闭。

using System;
using System.Data;
using System.Data.SqlClient;class Program
{static void Main(){string str = "Data Source=(local);Initial Catalog=Northwind;"+ "Integrated Security=SSPI";ReadOrderData(str);}private static void ReadOrderData(string connectionString){string queryString ="SELECT OrderID, CustomerID FROM dbo.Orders;";using (SqlConnection connection =new SqlConnection(connectionString)){SqlCommand command =new SqlCommand(queryString, connection);connection.Open();SqlDataReader reader = command.ExecuteReader();// Call Read before accessing data.while (reader.Read()){ReadSingleRow((IDataRecord)reader);}// Call Close when done reading.
            reader.Close();}}private static void ReadSingleRow(IDataRecord record){Console.WriteLine(String.Format("{0}, {1}", record[0], record[1]));}}

 
DataSets and DataAdapters
 
DataSets
DataSet对象和ADO RecordSet对象相似,但更强大,并且有一个重要区别:DataSet总是断开连接的。DataSet代表缓存数据,与数据库结构类似例如表,列,关系,和约束。然而,尽管DataSet可以也确实表现的更像一个数据库,最重要的请记住DataSet对象不直接和数据库交互,或者其他数据源。这使得开发人员无论使用什么数据源都可以始终使用一种一致的编程模型。数据从数据库,XML文件来,或者从用户输入来都可以放进DatSet对象。然后,当更改DataSet就可以被跟踪和验证之前更新数据源。DataSet对象的GetChanges方法实际上创建了第二个仅包含更改数据的DataSet。然后由DataAdapter(或其他对象)使用这个DataSet来更新原始数据源。
 
DataSet具备XML的特性,包括生产和消费XML数据和XML模式的能力。XML模式可以用来描述通过XML Web服务交换的模式。事实上,模式化DataSet实际上可以被编译为类型安全和完整的语句。
 
 
DataAdapters (OLEDB/SQL)
 
DataAdapter对象作为DataSet和数据源之间的桥梁。当使用Microsoft SQL Server数据库时,利用特定提供程序SqlDataAdapter(和他相关的SqlCommand和SqlConnection)可以提高整体的性能。对于其他支持OLE DB的数据库,你可以使用OleDbDataAdapter和他先关的OleDbCommand和OleDbConnection对象。
DataAdapter对象使用命令在DataSet完成变动后更新数据源。使用DataAdapter的Fill方法调用SELECT命令;使用Update方法对于每个更改行调用INSERT、UPDATE或者DELETE命令。你可以显示设置这些命令以便在运行时控制这些语句的使用解决变更,包括使用存储过程。对于特别的场景,CommandBuilder对象可以在运行时基于select语句生成这些语句。然而,运行时创建语句需要在服务器做额外的往返以便手机必须的源数据,所以在设计阶段显示的提供INSERT、UPDATE、和DELETE命令会导致更好的运行时性能。
示例

下面的示例使用 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据库中选择记录,并用选定的行填充 DataSet。 然后返回已填充的 DataSet。 为完成此任务,向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串,后者是一个 Transact-SQL SELECT 语句。

private static DataSet SelectRows(DataSet dataset,string connectionString,string queryString)
{using (SqlConnection connection = new SqlConnection(connectionString)){SqlDataAdapter adapter = new SqlDataAdapter();adapter.SelectCommand = new SqlCommand(queryString, connection);adapter.Fill(dataset);return dataset;}
}

适应的记录映射到相应的命令。
 
图示:DataAdapter和DataSets
 
下面的示例说明了通过SELECT语句加载DataAdapter,然后在DataSet内部更新、删除以及添加一些记录。最后,通过DataAdapter返回那些对数据库源的更新。这些构造的DeleteCommand、InsertCommand与UpdateCommand被显示在页面。也举例说明了使用多个DataAdapter对象加载多个表(Customers和Orders)到DataSet。
 
小结:
  1. ADO.NET是适合于.NET框架的改进版的ADO。
  2. ADO.NET是在多层架构、无状态性与XML的情况下诞生的。DataSet和DataAdapter2个对象提供这些场景。
  3. ADO.NET可以被用于从流获取数据,或者缓存用于更新的数据。
  4. 在文档里有更多关于ADO.NET的资料。
  5. 请记住,你可以直接对数据库执行命令以便插入、更新,与删除数据。你没有必要为了插入、更新、或删除数据把它放入DataSet。
  6. 同样,你可以使用DataSet绑定到数据,浏览数据,以及操作数据关联。

原文地址:

http://quickstarts.asp.net/QuickStartv20/howto/doc/adoplus/overviewcontents.aspx

转载于:https://www.cnblogs.com/JavCof/p/3427838.html

ADO.NET 快速入门(一):ADO.NET 概述相关推荐

  1. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  2. SSM_Mybatis_Day01(快速入门、映射文件概述、核心配置文件概述、相应API、代理开发方式、映射文件深入、数据类型的映射、列名和属性名不一致的时候的处理)

    SSM_Mybatis_Day01(快速入门.映射文件概述.核心配置文件概述.相应API.代理开发方式.映射文件深入.数据类型的映射.列名和属性名不一致的时候的处理) 1. Mybatis mybat ...

  3. ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET

    这是一个已经移植到 .NET 的 ADO 应用的例子.也演示了单向.只读.快速 DataReader 的使用.它演示如何使用 DataView 类从 DataSet 获取一个 Table 和 操作一个 ...

  4. ADO.NET 快速入门(四):从数据库填充 DataSet

    从数据库获取数据很容易,处理数据更容易.如果想要从数据库获取只进.只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它.关于如何使用 DataReader,请参考:使用 OLE D ...

  5. Filter和Listener-学习笔记01【Filter 快速入门】

    Java后端 学习路线 笔记汇总表[黑马程序员] Filter和Listener-学习笔记01[Filter快速入门] Filter和Listener-学习笔记02[Filter细节] Filter和 ...

  6. Bootstrap学习笔记01【快速入门、栅格布局】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  7. 2引擎帮助文档_ANSA快速入门指南中文帮助文档浅析(上)

    作者 | 团长 仿真秀科普作者 首发 | 仿真秀公众号(ID:fangzhenxiu2018) 导读:本文是ANSA入门系列第一篇(后续将会在仿真秀官网或APP同步发布).本系列致力于提供ANSA软件 ...

  8. 第 1 章 MybatisPlus 快速入门

    第 1 章 MybatisPlus 快速入门 1.MybatisPlus 概述 MybatisPlus:一款 Mybatis 的增强工具包 MybatisPlus 官网:https://mybatis ...

  9. JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)

    <JSON数据结构> 版本 作者 参与者 完成日期 备注 Data_JSON_V01_1.0 严立钻 2018.08.24 ++++一个好用的JSON在线编辑:http://www.kjs ...

最新文章

  1. Linux 实时流量监测(iptraf中文图解)
  2. 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
  3. mysql的二级分区_分布式数据库一级分区和二级分区
  4. 图像的全局特征--HOG特征、DPM特征
  5. WS2811B驱动使用及使用说明
  6. android按钮半透明
  7. Windows系统重装Linux系统
  8. 美国大学 计算机,U.S.News美国大学计算机专业排名
  9. 计算机电脑怎么开热点,笔记本电脑怎么开热点_教你笔记本电脑开热点的方法...
  10. chi2inv函数 matlab_matlab中ltiview怎么使用啊
  11. 安卓逆向——修改APP的名称,图标和包名多开分身
  12. Websphere远程代码执行-CVE-2015-7450
  13. 谷歌公开了内部管理Infra层的两个工具的Paper
  14. win10设置以管理员身份开机启动
  15. Android 之路20---Java基础14
  16. MySQL5.7用group by分组根据组中某个字段的最大值求取那条记录(注意是整条记录)
  17. 神经放射学诊断中的MRI数据分析
  18. 泛微在环保行业特色应用:项目、采购、工程、财务数字化管理
  19. 河南科技大学计算机信息安全技术考试,河南科技大学军事理论试题4
  20. 金蝶软件安装时,提示安装包配置文件(Setup.Lst)文件不存在无法安装处理方法

热门文章

  1. 网络营销之下的泡泡玛特盲盒广受年轻用户群体的喜爱与关注
  2. 网络推广外包中有哪些不可取行为值得网络推广外包专员警示?
  3. solrcloud java_SolrCloud之zookeeper中使用java代码创建集合
  4. 32位微型计算机quot;中的32指的是,《计算机应用基础作业一).doc
  5. server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
  6. nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
  7. 深度解读Facebook刚开源的beringei时序数据库——数据压缩delta of delta+充分利用内存以提高性能...
  8. git上传超过100m大文件
  9. sqlserver 类似oracle的rownum功能: row_number
  10. STC10F10XE定时器中断输出10KHz的方波程序