使用语句-这对sql连接比sql适配器更有用吗
本文关键字:sql 适配器 有用 连接 语句 这对 | 更新日期: 2023-09-27 18:27:49
我知道下面的语句对垃圾收集很有用。实际上,它必须与Try/Catch/finally相同。如果我将其用于sql连接,我是否还应该为sql适配器嵌套另一个"using"语句?然后对数据集使用进一步嵌套?
using()
{
}
问题的另一个补充是,如果我想在多个方法之间使用相同的连接,那么在每个方法中都使用"Using()"是最佳实践,还是我可以只创建一次这个连接对象?
值得指出的是,您可以将多个using
语句组合成一个块,如下所示:
using (SqlConnection connection = new SqlConnection("connectionString"))
using (SqlCommand command = new SqlCommand("SELECT * FROM Users", connection))
{
// Do something here...
}
一旦退出此块(到达块的末尾或抛出异常),SqlConnection
和SqlCommand
对象都将自动释放。
using
与try/catch/finally
不同!!using
确保在括号中的IDisposable
对象上自动调用Dispose
,因此当
using (SqlConnection conn = new SqlConnection(...))
{
}
与相同
SqlConnection conn = new SqlConnection(...);
try
{
}
finally
{
conn.Dispose();
}
根本没有捕获块,也没有捕获错误!
如果您想及时处理创建的所有一次性对象,那么是的,您应该为每个对象使用using
块。
有时,在try
块之外创建所有内容,然后在一个finally
块中处理所有内容可能更容易阅读(例如在Windows窗体应用程序中绘图。有时您需要许多画笔和笔。您可以在try
之前创建它们,在块中使用它们,然后在finally
块中处理它们)。
这基本上是一个编码风格的问题。
是的,应该使用using
语句来处理实现IDisposable
的所有内容。using
语句实际上并不是关于垃圾收集,而是关于资源(而不是内存)。DataSet和SqlDataAdapter都是IDisposable
的实例。
using
块意味着您可以保证对象所拥有的资源以及时、确定的方式进行处置。如果没有using
,就无法保证这些资源何时会被释放。这可能会导致资源泄漏,例如文件句柄用完。
using
语句用于实现IDisposable
接口的类的每个实例。它与GC(垃圾收集器)的关系是,您的实例在GC之前释放它们的资源。这对于共享资源非常有用,并且有助于并发性。
至于您的问题,是的,您应该在Connection和Adapter上使用using语句。
至于try-and-catch块,与using语句没有相似之处。它们两个用于不同的目的。一个(使用)用于提前释放资源,另一个用于处理错误,无论这些错误是未预期的还是预期的