使用语句 - 这对sql连接比sql适配器更有用吗?

时间:2012-03-14 08:54:06

标签: c# sql-server

我知道以下语句对垃圾收集很有用。实际上它必须与Try / Catch / finally相同。如果我将它用于sql连接,我还应该为sql适配器嵌套一个'using'语句吗?然后进一步嵌套使用DataSet?

using()
{
} 

问题的另一个补充是,如果我想在多个方法中使用相同的连接,那么最好在每个方法中使用“Using()”,或者我可以只创建一次这个连接对象吗? / p>

4 个答案:

答案 0 :(得分:9)

其他值得指出的是,您可以将多个using语句组合到一个块中,如下所示:

using (SqlConnection connection = new SqlConnection("connectionString"))
using (SqlCommand command = new SqlCommand("SELECT * FROM Users", connection))
{
    // Do something here...
}

退出此块后(通过到达块的末尾或抛出异常),SqlConnectionSqlCommand对象都将自动处理。

答案 1 :(得分:5)

using try/catch/finally不一样 !! using确保在括号中的Dispose对象上自动调用IDisposable,所以

using (SqlConnection conn = new SqlConnection(...))
{
}

相同
SqlConnection conn = new SqlConnection(...);
try
{
}
finally
{
    conn.Dispose();
}

没有任何陷阱,没有错误被捕获!

如果你想要及时处理你创建的所有一次性对象,那么是的,你应该为每个对象使用using块。

有时可能更容易阅读以创建try块之外的所有内容,然后将所有内容都放在一个finally块中(此示例将在Windows窗体应用程序中绘制。有时您需要你可以在try之前创建它们,在块中使用它们并将它们放在finally块中。

这基本上是编码风格的问题。

答案 2 :(得分:4)

是的,您应该使用using语句来处置实现IDisposable的所有内容。 using语句不是关于垃圾收集,而是关于资源(除了内存)。 DataSetSqlDataAdapter都是IDisposable的实例。

using块意味着您保证对象所持有的资源以及时,确定的方式处理。如果没有using,则无法保证何时释放这些资源。这可能导致资源泄漏,例如文件句柄耗尽。

答案 3 :(得分:4)

using语句用于实现IDisposable接口的类的每个实例。它与GC(垃圾收集器)的关系是你的实例在GC执行之前释放它们的资源。这对共享资源非常有用,并且有助于并发。

至于你的问题,是的,你应该在Connection和Adapter上使用using语句。


对于try和catch块,与using语句没有相似之处。它们中的两个用于不同的目的。一个(使用)用于提前释放资源,另一个用于处理错误,无论是未预料到的还是预期的