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. libevent入门介绍

    libevent是之前看到的一个别人推荐的清凉级网络库,我就想了解一下它.今天下载到了一个人写的剖析系列,从结构和源码方面进行了简要分析.只是这个分析文章是2010年的,有点过时了(跟现在的libev ...

  2. python批量提取eml附件

    从批量eml文件中提取附件,使用方式如下 代码如下 import email import os import sys #获取eml附件信息 def Get_Annex_Message(FilePat ...

  3. 微信测试号开发入门配置问题java

    这个测试号配置弄了好几天了,入了无数坑,终于解决了...辛苦我了,手动安慰一下自己.. 为了萌新们以后不要再浪费时间绕半天做无用功.看看楼楼的艰苦历程吧. 此教程针对没有云服务器,没有自己的域名的.没 ...

  4. Python练手例子(15)

    85.输入一个奇数,然后判断最少几个 9 除于该数的结果为整数. 程序分析:999999 / 13 = 76923. #!/usr/bin/python #coding=utf-8 if __name ...

  5. [WEB]绕过安全狗与360PHP一句话的编写

    00x01安全狗的确是让人很头痛,尤其是在上传一句话或者写入一句话的时候,会被安全狗拦截从而拿不下shell.当然,安全狗是最简单的一款waf,很容易就进行一个绕过.00x02对于绕过安全狗跟360, ...

  6. [Swift]LeetCode210. 课程表 II | Course Schedule II

    There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...

  7. [Swift]LeetCode319. 灯泡开关 | Bulb Switcher

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...

  8. [Swift]LeetCode696. 计数二进制子串 | Count Binary Substrings

    Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...

  9. [Swift]LeetCode807. 保持城市天际线 | Max Increase to Keep City Skyline

    In a 2 dimensional array grid, each value grid[i][j]represents the height of a building located ther ...

  10. 细说javascripe事件传播流程

    当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...