c#

位置:IT落伍者 >> c# >> 浏览文章

掌握ADO.NET的十个热门技巧[1]


发布日期:2019年12月16日
 
掌握ADO.NET的十个热门技巧[1]

ADONET提供了一个统一的编程模式和一组公用的类来进行任何类型的数据访问而不管你用何种语言来开发代码ADONET是全新的但又与ADO尽可能保持一致它使编程模式从一个客户端/服务器基于连接的模式转变到了一个新的模式这个新模式可以让断开的前端下载记录离线工作然后重新连接来提交变化ADONET是WinForms应用程序ASPNET应用程序和Web services的一个共有的特点其功能可以跨LAN和Internet连接来实现可以在有状态(stateful)和无状态(stateless)情况下实现

这就意味着作为一个共有的技术ADONET的对象在所有可能的环境中并不是同等强大的用ADONET为一个富客户端(rich client)构建一个数据层同为一个客户端通常是共享的和重要的实体(如Web服务器)的Web应用程序构建一个数据层并不一样

如果你从前是个ADO开发人员现在已经用ADONET了那么你可能把数据访问看做是一个万能的对象如Recordset我们很自然地会将旧的对象模式同新的对象模式匹配起来并将现有的方法用于NET应用程序然而在ADO环境中的某些好的方法在转换到ADONET环境时就可能并不强大了而且看起来很微不足道的ADONET对象模式的复杂性可能会导致很糟糕的编程情况不理想的代码甚至是功能不能实现我将讲述在ADONET编程中可能会给你带来麻烦的个方面并提供技巧和解决方法来避免它们

避免DatabaseAgnostic形式的编程

ADONET中的数据访问是强类型的就是说在任何时候你都必须了解你正在处理的是什么数据源(data source)相反在ADO中你可以编写数据访问代码(它们充分利用了OLE DB提供者的通用模式)并将基本的数据源只看做是个参数ADO对象模式提供了唯一的连接和命令对象它们隐藏了基本的DBMS的特征一旦你在Connection对象上设置了Provider属性那么为SQL Server或Oracle创建一个命令对象就需要同样的代码许多开发人员都通过该功能来使用生产环境外的Access数据库以便很快地测试或演示应用程序

在ADONET中是不能这么做的因为在ADONET中至少连接对象必须是特定于数据源的你不能以一种间接或通用的方式来创建连接除非你决定运用ADO的数据访问技术——OLE DB在ADONET中你可以用OleDbConnection类创建到一个数据库的连接这个类可以让你访问各种数据源NET托管环境中运用SystemDataOleDb名字空间中的类并不特别有效因为它们是用OLE DB来访问数据的你只能用OLE DB来访问那些没有NET数据提供者的数据源

如果你的应用程序必须访问全异的数据源(而且你知道可能涉及什么数据源——一个合理的假设)那么你可以创建一个集中的factory类它返回一个连接对象并通过一个通用的接口(IDbConnection接口)来管理这个连接对象Factory类在内部运用应用程序参数来决定使用什么NET数据提供者

@# Create the connection

Dim factory As New MyAppConnectionFactory

Dim conn As IDbConnection

conn = factoryCreateConnection(connString)

@# Create the command

Dim cmd As IDbCommand = connCreateCommand(query)

一旦你得到了一个连接对象你就可以以databaseagnostic的方式来创建和执行一个命令了而不管使用的数据源是什么你可以使用CreateCommand方法并通过IDbCommand接口来引用命令然后你可以用IDbCommand接口上的ExecuteReader方法或ExecuteNonQuery方法来执行命令如果你用ExecuteReader你就可以得到一个data reader并可以用IDataReader接口来对它进行一般的访问了

你不能用一个通用的数据库编程模式来填充一个DataSet对象实际上你不能像创建一个命令那样以一种间接的方式来创建data adapter对象原因就是在有些情况下data adapter不同于命令对象它可以在内部隐含地创建一个连接然而它必须以一种强类型的方式工作而且必须知道基本的数据库服务器是什么

运用字符串来串行化扩展的属性

几个ADONET对象都拥有一个叫做ExtendedProperties的集合该属性就像收集货物(cargo collection)一样可以用来存储任何类型的用户信息DataSetDataTable和DataColumn就是可以提供该数据成员的类ADONET通过运用PropertyCollection类封装的一个哈希表来实现这个ExtendedProperties属性你可以用Add方法将数据插入到集合中Add方法使用了两个参数来保存数据——key和value该方法的原形将参数定义为通用的对象类型你可以存储任何类型的信息然而在特殊情况下你应该特别注意那些被保存为扩展属性的对象的类型

如果你想将包含扩展属性的ADONET对象串行化到XML最好只用字符串如果不行你必须对ADONET的内在的serializer的行为采取对策

当ADONET将一个DataSet对象保存到XML时ExtendedProperties集合的内容就被串行化到内存中了但大概是出于性能的原因ADONET运用了ToString方法而不是XML serializer来实现串行化更重要的是当ADONET对象被读回并复原时ExtendedProperties集合包含的是对象的字符串表现形式而不是对象本身

[] [] [] []

               

上一篇:掌握ADO.NET的十个热门技巧[2]

下一篇:掌握ADO.NET的十个热门技巧[3]