ADO.NET有用技巧两则__第1页
ADO.NET有用技巧两则__第2页
ADO.NET有用技巧两则__第3页
ADO.NET有用技巧两则__第4页
ADO.NET有用技巧两则__第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ADO.NET有用技巧两则_ 要想充分发挥ADO.NET的优势,不仅需要全面、深化理解ADO.NET编程模型,准时总结阅历、技巧也非常重要。ADO已经有多年的实践阅历,ADO.NET以此为基础,供应了更加丰富、强大的工具;尽管如此,ADO.NET的设计目标到底不是供应一个即插即用的工具,它不会把全部的编程工作简化到仅靠鼠标点击就可以完成的程度。 ADO.NET包含了一大堆代表数据访问模型中各种规律实体的对象,其中尤以连接、事务这两个对象最为重要。连接的作用是建立一个与后端数据库通信的通道,创建连接对象必需以特定的.NET数据供应者为基础。事务对象可以在已有的连接对象上创建,也可以通过显式地执行

2、一个BEGIN TRAN SQL语句创建。虽然理论很简洁,但事实上,围绕连接、事务的不确定因素许多,而且它们对应用整体的稳定性和效率有着至关紧要的影响。 如何保存连接字符串,爱护连接字符串中可能包含的敏感信息(例如密码)?怎样设计一个完善的数据访问策略,既考虑到平安性(即身份验证、授权),却又不至于对性能和可伸缩性造成太大的影响?假如需要用到事务,那么如何高效地实现和掌握事务?采纳自动事务还是手动事务?在用法ADO.NET时,这些问题都必需认真考虑。 一、连接字符串,连接池 数据库连接是一种重要的、有限的、开销昂贵的资源,因此用好连接对象是任何应用的最基本的要求。用法数据库连接的要点可总结如下

3、: 保存连接字符串应留意平安。 打开连接应迟,关闭连接应早。 连接字符串是访问数据库的钥匙。连接字符串除了说明要访问的数据之外,还包含了用户为什么可以访问那些数据的身份证明。在执行数据库操作时,用户身份证明是确定数据访问权限的最重要的因素。 1.1 保存连接字符串 目前,硬编码的连接字符串具有最好的性能,由于它们挺直编译进了应用的代码之中。然而,硬编码的字符串影响程序的敏捷性,一旦连接字符串转变,应用程序必需重新编译。 将连接字符串保存到外部提高了敏捷性,代价是访问外部字符串需要付出额外的开销。但在绝大多数状况下,由此导致的性能开销可以忽视不计,真正需要担忧的是平安问题。例如,攻击者可能修改、

4、窃取连接字符串。将连接字符串保存到外部环境的常见途径有:配置文件,UDL文件,Windows注册表。 .NET框架配置文件以纯文本文件的形式部署,访问便利。假如连接字符串包含密码,文本格式将是最大的缺陷所在,由于密码将以明文的形式保存。可以考虑引入一个专用的加密/解密引擎,不过这部分工作需要开发者自己完成。 UDL文件是供OLE DB供应者用法的文本文件,也就是说,SQL Server托管供应者不支持UDL文件。UDL文件也存在和前面的配置文件一样的平安问题,总地看来优势不多。 最终,Windows注册表可以作为一个自然?平安的存储场所。注册表是一个保存关键信息的系统学问库,假如结合运用加密技

5、术,可以达到较高的平安性。用法注册表的主要缺点是部署麻烦,要求创建注册键(可能还要执行加密)以及从注册表读取数据。虽然.NET Framework供应了一组调用底层Win32 API的封装类,但这些类都没有供应加密功能。aspnet_setreg.exe工具可以用来创建HKEY_LOCAL_MACHINE下的注册键保存用户名称和密码,例如:aspnet_setreg.exe -k "SoftwareMyData" -u:userID -p:password。该指令将加密指定的用户ID和密码。 1.2 连接池原理 连接池允许我们通过一个缓冲池重用现有的连接对象,避开每次用法连

6、接对象时都要新建一个对象。采纳连接池之后,只要少量的连接对象就可以满足大量客户端的需要。 每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据供应者会尝试将指定的连接字符串与连接池的字符串进行匹配。假如匹配失败,数据供应者创建一个新的连接并将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。 连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后,系统会依据需要新建和加入连接对象,始终到达最大连接对象数量限额为止。假如程序恳求

7、一个连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则恳求被放入队列,一旦有连接被释放回缓冲池就立刻取出访用。 避开用编程的方式构造连接字符串。假如通过合并多个输入数据的方式构造出连接字符串,很简单给注入式攻击以可乘之机。假如必需用到用户输入的数据,务必进行严格的验证。 1.3 关闭连接 关闭一个连接时,连接对象被返回给连接池以便重用,但这时实际的数据库连接并未被拆除。假如禁用了连接池,则实际的数据库连接也被关闭。这里必需强调的一点时,连接对象用法完毕后应当显式关闭并将它返回给连接池,不要依靠垃圾收集器来释放连接。事实上,当连接对象的引用超出有效范围时,连接不肯定被关闭垃圾

8、收集器的功能是拆除代表物理连接的.NET封装对象,但这并不意味着底层的连接也被关闭了。 调用Close或Dispose方法可以将连接释放回连接池。只有当生存期结束或消失严峻错误时,连接对象才会被从连接池删除。 1.4 连接池与平安 假如一个应用程序的全部数据访问操作都用法同样的连接字符串,连接池的优势将发挥到极限。但是,这只是一种抱负化了的状况,很可能与应用程序的其他要求存在冲突。例如,假如只用法一个连接字符串,要在数据库这一层次上执行平安掌握就很困难了。 另一方面,假如让每一个用户分别用法自己的连接字符串(即为每一个用户分别设定数据库帐户),势必消失大量小型的连接池,很多连接根本不会被重用。

9、依照惯例,这类问题的最佳解决方案是查找两个极端之间的一个适当折衷点。我们可以设置一组具有代表性的公用帐户,同时修改存储过程,使之接受一个表示用户标识的参数,存储过程依据传入的用户标识执行不同的操作。 二、事务模式 分布式企业应用离不开事务。在数据访问代码中加入事务管理功能主要有两种方式:手动方式,自动方式。 在手动方式中,程序员负责编写全部配置、用法事务机制的代码。自动(或COM+)事务则在.NET类中加入声明式属性,指定运行时对象的事务特性。自动方式便利了将多个组件配制成在同一个事务之内运行。两种事务方式都支持本地的或分布式的事务,但自动的事务方式极大地简化了分布式事务处理。 必需留意的是,

10、事务是一种开销很大的操作,所以决定用法事务之前务必一再考虑。假如的确需要用法事务,那就要尽量缩小事务的粒度,削减对数据库的加锁时间、加锁范围。例如,对于SQL Server,单个的SQL语句不需要显式地声明事务,SQL Server会自动将每一个语句作为一个独立的事务运行。手动的本地事务总是比其他事务快得多,由于它不需要涉及DTC(Distributed Transaction Coordinator)。 手动事务、自动事务应当视为两种不同的、互斥的技术。假如要在单个数据库上执行事务性操作,优先考虑手动事务。当单个事务跨越多个远程数据库,或单个事务涉及多个资源管理器(例如,一个数据库和一个MSMQ资源管理器),优先考虑自动事务。不管怎样,应当极力避开混合运用两种事务模式。假如性能不是格外重要,即使只对一个数据库操作也可以考虑用法自动事务,使代码更加简洁(但速度略慢)。 总而言之,要提高数据库访问代码的质

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论