我在大多数样本中看到SqlCommand
像这样使用
using (SqlConnection con = new SqlConnection(CNN_STRING))
{
using (SqlCommand cmd = new SqlCommand("Select ID,Name From Person", con))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
我知道我们为什么要使用using
陈述。但SqlCommand
不包括Close()
方法所以我们真的应该在一个using
陈述?
因为它还实现了IDisposable.
using 语句的目的是当控制到达 using 结束时,它将处理 using 块的对象并释放内存。它的目的不仅是为了自动关闭连接,基本上它会处理连接对象,并且显然连接也因此而关闭。
它的目的是释放我们在Using语句中使用的资源。
根据MSDN:
通常,当您使用IDisposable
对象,您应该在 using 语句中声明并实例化它。 using 语句调用Dispose
以正确的方式在对象上使用方法,并且(当您如前面所示使用它时)它也会导致对象本身超出范围Dispose
叫做。在 using 块中,对象是只读的,不能修改或重新分配。
using 语句确保Dispose
即使在调用对象的方法时发生异常,也会被调用。您可以通过将对象放入 try 块中然后调用来获得相同的结果Dispose
in a finally
堵塞;事实上,这就是编译器翻译 using 语句的方式。前面的代码示例在编译时扩展为以下代码(请注意额外的花括号来创建对象的有限范围):
NOTE:
您可以实例化资源对象,然后将变量传递给 using 语句,但这不是最佳实践。在这种情况下,在控制离开 using 块后,对象仍保留在范围内,即使它可能不再有权访问其非托管资源。换句话说,它将不再被完全初始化。如果您尝试在 using 块之外使用该对象,则可能会导致引发异常。因此,通常最好在 using 语句中实例化对象并将其范围限制在 using 块内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)