do we need using for the SqlCommand or is it enough just for the SqlConnection and SqlDataReader(我们需要用于 SqlCommand 还是仅用于 SqlConnection 和 SqlDataReader 就足够了)
问题描述
我从 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 就足够了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我们需要用于 SqlCommand 还是仅用于 SqlConnection 和 SqlDataReader 就足够了


- 在 C# 中异步处理项目队列 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- 使用 rss + c# 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01