知识大全 数据库连接[2]
Posted 资源
篇首语:知是行的主意,行是知的功夫。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据库连接[2]相关的知识,希望对你有一定的参考价值。
C#高级编程:数据库连接[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
——此文章摘自《C#高级编程(第 版)》定价 元 特价 元 购买catch ( Exception ex ) // Do something about the exception finally // Ensure that the connection is freed conn Close ( ) ;
在finally块中 可以释放已经使用的任何资源 这种方式的惟一麻烦是必须确保关闭连接 很容易忘记在finally块中添加关闭连接的命令 所以应在编码风格上添加一些不容易出现反常情况的内容
另外 在给定的方法中可能会打开许多资源(例如两个数据库连接和一个文件) 这样try…catch…finally块的层次有时可能不容易看懂 但还有另一个方式可以确保资源的关闭—— 使用using语句 第二种方式—— 使用using语句块 在开发C#的过程中 NET在对象不再引用之后清理它们的方法是使用非决定性的析构方式 这已经引起了一个非常热烈的讨论
在C++中 对象只要使用完毕 就会自动调用其析构函数 这对于设计基于资源的类的人员来说 是一个非常好的消息 因为如果用户忘记关闭资源 使用析构函数是非常理想的 只要对象使用完毕 就会调用C++析构函数 所以 如果出现了异常 但没有捕获 有析构函数的所有对象就会调用它们的析构函数
在C#和其他托管语言中 没有自动 决定性的析构方式 而是有一个垃圾收集器 它会在未来的某个时刻释放资源 它是非决定性的 因为我们不能确定这个过程在什么时候发生 忘记关闭数据库连接可能会导致 NET可执行程序的各种问题 幸运的是 我们还有解决的方法 下面的代码说明了如何使用using子句确保实现IDisposable接口(详见第 章)的对象在退出块时立即被释放 string source = server=(local)\\\\NetSDK; + integrated security=SSPI; + database=Northwind ; using ( SqlConnection conn = new SqlConnection ( source ) ) // Open the connection conn Open ( ) ; // Do something useful
在这个示例中 无论块是如何退出的 using子句都会确保关闭数据库连接
查看一下连接类的Dispose()方法的IL代码 它们都检查连接对象的当前状态 如果其状态为打开 就调用Close()方法 浏览 NET程序集的一个强大工具是Reflector(可以从/ aisto /roeder/dotnet/上获得) 这个工具允许查看任何 NET方法的IL代码 还可以把IL代码反编译为源代码 让我们轻松地确定给定的方法的作用
在编程时 应至少使用这两个方法中的一个 或者两个方法都使用 无论在哪里获得资源 最好都使用using ()语句 因为尽管我们都会编写Close()语句 但有时会忘记 此时using子句就会发挥作用 这两种方式都没有好的异常处理方式来替代 所以在大多数情况下 最好组合使用这两种方法 如下面的示例所示 try using (SqlConnection conn = new SqlConnection ( source )) // Open the connection conn Open ( ) ; // Do something useful // Close it myself conn Close ( ) ; catch (Exception e) // Do something with the exception here
这里显式调用了Close() 但这是不必要的 因为using子句将确保在任何情况下都执行关闭操作 但是 应确保像这样的资源尽可能早地释放 因为在块的其余部分可能有更多的代码 而在这些地方没有必要锁定资源
另外 如果在using块中出现了异常 using子句就会确保在资源上调用IDisposable Dispose方法 在本例中将确保总是关闭数据库连接 这样 与必须确保在异常子句中关闭连接相比 代码的可读性更高
最后 如果编写一个封装资源的类 无论该资源是什么 都应实现IDisposable接口 关闭资源 这样 任何使用该类的代码都可以利用using()语句 以确保资源被释放
cha138/Article/program/net/201311/14824相关参考