问题描述
我从 msdn
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0} {1}", dr.GetString(0), dr.GetString(1));
}
}
如您所见,这里没有使用 SqlCommand,所以,它需要吗?
as you can see there is no using for the SqlCommand here, so, does it needs to be ?
推荐答案
您需要为您创建的每个实现 IDisposable
的对象使用 using
.这包括 SqlCommand
和 SqlConnection
.
You need a using
for every object you create that implements IDisposable
. That includes the SqlCommand
and the SqlConnection
.
这条规则很少有例外.主要的例外是 WCF 客户端代理.由于设计缺陷,他们的 Dispose
方法有时会抛出异常.如果您在 using
语句中使用了代理,则第二个异常将导致您丢失原始异常.
There are very few exceptions to this rule. The main exception is WCF client proxies. Due to a design flaw, their Dispose
method can sometimes throw an exception. If you used the proxy in a using
statement, this second exception would cause you to lose the original exception.
这篇关于我们需要用于 SqlCommand 还是仅用于 SqlConnection 和 SqlDataReader 就足够了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!