ADO.NET 宏观定义

传统ADO主要针对紧密连接的客户端/服务器端系统,而 ADO.NET考虑到了断开连接式应用并且引进了 Dateset 它代表任意数量的关联表,其中每个表都包含了行和列的集合的本地副本。使用Dateset的话.在断开数据库连接的情况下调用程序集(如 web 页面或者桌面可执行程序)处理和更新它的内容.然后使用关联的数据适配器把修改后的数据提交回数据库。

ADO.NET 的三面

从概念上来说,ADO.NET类库有三种完全不同的方式来实现数据访问:连接式、断开式和通过Entity 框架。

当使用连接式的时候,你的代码需要显式连接或者断开基层数据源。用这种方式使用 ADO.NET时,通常会用到连接对象、命令对象和数据读取器对象来实现这样的数据交互。

另一方面,断开式数据访问允许通过一组DataTable对象(保存在Dataset中)来获取外部数据的一个客户端副本;当你通过相关的数据适配器对象来获取Dataset 的时候,数据连接会自动打开或关闭。你可能也猜到了,这样能快速释放连接以便其他调用者使用,也极大增加了系统的可伸缩性

一旦获取了一个DataSet后.就能在不需要花费网络流量的情况下随意修改内容。同样.如果你想把修改后的结果重新提交回数据库,需要再次使用数据适配器对象(关联一组SQL语句)来更新数据源,此时连接会为数据库更新重新打开并在结束操作后会立即被关闭。

一个数据访问API,叫做 Entity Framework (简称EF).借助 EF 可以用封装了大量数据库底层细节的客户端对象与关系型数据库交互。同样,EF编程模型还可以使用 LINQ to Entity 语法,用强类型的LINQ 查询与关系划数据库交互。

ado.net数据提供程序

ADO.NET没有提供单一对象集来和多个数据库管理系统(DBMS)进行通信.而是提供了多种数据提供程序.每种为某个DBMS进行优化,这种方法的好处是,一来能以编程方式利用DBMS独有的一些特性,二来能直接和基层的DBMS引擎进行连接而不需要为不同的DBMS做中间的映射层。
简单来说,数据提供程序是一组定义在用于和特定的数据源类型进行通信的命名空间内的一组类
型。不管你用的是哪种数据提供程序.它们都有一系列类来提供核心功能。

 
     AOO.NET数据提供程序的一些核心对象
 对象  基类  实现的接口  作用
Connection   DbConnection  IDbConnection  连接和断开数据源,提供了相关事务对象的访问 
 Command  DbCommand IDbCommand  代表SQL查询语句或者存储过程名,同样提供了相关数据读取器对象的访问  
 DataReader DbDataReader IDbDataReader和IDataReader 提供只读只向前形式的教据访问 
DataAdapter  DbDataAdapter  DbDataAdapter和IDataAdapter  在数据库和调用这之间传递DataSet,内置4个命令对象来实现教据的查询、插入、修改和删除操作 
Parameter DbParameter  IDataParameter和IDbDataParameter 在参数化查询中表示参数
Transaction DbTransaction IDbTransaction  IDbTransaction   实现数据库事务

尽管这些类的命名对于不同的数据提供程序不尽相同(比如SqlConnection 和OracleConnection 、OdbcConnection 和MySqlConnection )。但是它们都从相同的基类(就连接对象而言,是DbConnection)继承并且实现相同的接口(如 IDbConnection)。这样的话.一旦你掌握了一种数据提供程序的用法.学习其他的数据提供程序就非常简单了;

微软提供的ado.net数据提供程序

由定义在system.Data.OleDb 命名空间下的类组成的OLE DB 数据提供程序能让你访问所有支持基于传统COM的OLE DB协议的数据库。使用这个数据提供程序,能非常简单地改变连接字符串中的"Provider",并能和各种OLE DB数据库进行通信。

需要知道的是,其实OLE DB数据提供程序在后台调用各种COM对象来实现数据交互,这可能会影响程序的性能。基本上当某个DBMS没有对应的.NET数据提供程序时,我们才会用OLE OB数据提供程序。然而,称职的OBMS 都应该有自定义的ADO.NET教据提供程序提供下载。System.Data.OleDb应该被称为遗留命名空间

System.Data.Sqlclient命名空间包含SQL server 数据提供程序的一些类,井且提供了和OLE DB数据提供程序差不多的一些功能.但是主要的区别是它绕开OLE DB层进行访问。带来的效率显而易见。同样,SQL server数据提供程序也能很好利用DBMS的一些特性

简述ADO.NET(一)的更多相关文章

  1. 简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作

    连接数据库代码: private SqlConnection con = null; public void OpenConnection(string connectionString) { con ...

  2. 简述ADO.NET的连接层

    前面曾提到过ADO.NET的连接层允许通过数据提供程序的连接.命令.数据读取器对象与数据库进行交互.当想连接数据库并且使用一个数据读取器对象来读取数据时.需要实现下面的几个步骤 * 创建.配置.打开连 ...

  3. 简述ADO.NET命名空间

    system.data命名空间的类型 system.data命名空间的核心成员 命名空间 作用 Constraint  表示某个DataColumn对象的约束 DataColumn 表示某个DataT ...

  4. .net 面试题

    1.列举ASP.NET页面之间传值的几种方式. 答:使用QueryString,如.../id=1;response.Redirect() 使用Session 使用Server.Transfer 使用 ...

  5. C#精华面试题及答案 三

    PS.学了两三年的软件开发到头来发现连一些基本的东西都没掌握,通过面试题来检验自己的水平,让学习变得更加有方向性,也为将来择业而打下基础,不至于到时候手忙脚乱. 一.选择,填空题 1. 在ADO.NE ...

  6. C-sharp精华面试题

    注:红色表示答案 一.选择,填空题 1.  在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(C). a)   ...

  7. .net面试题升级版

    1.列举ASP.NET页面之间传值的几种方式. 答:使用QueryString,如.../id=1;response.Redirect() 使用Session 使用Server.Transfer 使用 ...

  8. .NET面试题(三)

    第1讲:面试前期准备 1.了解相关技术职务需要的技术人才                              2.准备一份出色的个人简历 第2讲:面试前期准备                   ...

  9. 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型

    如何在ADO中使用接口的抽象数据提供程序 在cofig中 appSettings下,配置数据连接类型 <appSettings> <!--这个键值映射到枚举值中的某个值--> ...

随机推荐

  1. D. Frets On Fire 前缀和+二分

    这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...

  2. 关于实体类getset方法首字母小写问题

    实体类:private Date cDateTime;private String cNickname; public Date getcDateTime() { return cDateTime;} ...

  3. 高德Location

    1.创建Demo,获取key 打开高德开发平台 → 我的应用 → 创建应用 → 创建新Key 说明: 1.发布版安全码获取:用自己的签名打包成apk安装软件,用SHA1工具查看 2.调试版安全码获取: ...

  4. AIO系列文档(2)----TIO使用

    AIO系列文档(1)----图解ByteBuffer中介绍了ByteBuffer用法,下面通过介绍t-io介绍如何使用: hello world例子简介 本例子演示的是一个典型的TCP长连接应用,代码 ...

  5. InputStream和Reader,FileInputStream和 FileReader的区别

    一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...

  6. [Swift]LeetCode277. 寻找名人 $ Find the Celebrity

    Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...

  7. [Swift]LeetCode338. 比特位计数 | Counting Bits

    Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the ...

  8. [Swift]LeetCode436. 寻找右区间 | Find Right Interval

    Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...

  9. iOS学习——Quartz2D学习之DrawRect

    Quartz2D学习之DrawRect 本文以问答形式主要讲述Quartz2D的相关内容,参考内容是网上下载的学习视频资料. 1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Ma ...

  10. 13.Git分支-变基(rebase)、rebase VS merge

    1.变基的基本操作 在Git中整合来自不同分支的修改主要有两种方法:merge和rebase. 看下面的例子: 开发任务分叉到了两个不同的分支,并且都有了新的提交. 这时候我们可以使用 git mer ...