简述ADO.NET(一)
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的有关的命名空间
ado.net命名空间 | |
命名空间 | 作用 |
microsoft.sqlsercer.server | 这个命名空间提供的类型促进clr和sql server 2005及后续版本的集成服务 |
system.data | 这个命名空间定义了各种数据提供程序所用的主要类型.包括公共接口和断开连接层的许多类型(如dataset 和datatable 等) |
system.data.common | 这个命名空间包含了各种数据提供程序共享的类型,也包括公共抽象基类 |
system.data.sql | 这个命名空间能使你发现安装在当前本地网络的的sql server实例 |
ystem.data.sqltypes | 这个命名空间包含微软sql server中使用的本机数据类型。尽管你可能不会直接使用相应的clr数据类型.但是可以优化sqltypes来和sql server 交互(例如,如果 sqlserver 教据库包含整数值.你可以使用int或sqltypes.spllnt32来表示它) |