【发布时间】:2013-03-26 14:12:58
【问题描述】:
我正在尝试习惯在 C# 中使用“使用”块,但我很难理解何时应该使用它们。
这是一个例子。
我的原始代码,没有using 块:
SqlConnection conn = new SqlConnection(cCon.getConn());
SqlCommand cmd = new SqlCommand("sp_SaveSomething", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@x", xxx));
cmd.Parameters.Add(new SqlParameter("@ORG", ORG));
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ }
finally
{
conn.Close();
}
但我真的应该这样做吗?还是我应该使用(SqlConnection conn = new SqlConnection(cCon.getConn()))?请帮助我理解这一点。我原来做的方式有那么错吗?
SqlConnection conn = new SqlConnection(cCon.getConn());
using( SqlCommand cmd = new SqlCommand("sp_SaveSomething", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@x", xxx));
cmd.Parameters.Add(new SqlParameter("@ORG", ORG));
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ }
finally
{
conn.Close();
}
}
【问题讨论】:
-
你应该阅读这篇文章。它很好地解释了它; msdn.microsoft.com/en-GB/library/yh598w02.aspx。特别是,看一下代码 sn-p,它显示了编译器实际转换的“使用”语句。
-
try/catch/finally 是在 iDisposable 对象内部执行的,因此在这种情况下不需要执行 try/catch/finally。如果您有一些其他逻辑需要 catch/finally 用于其他目的,您可能仍然需要它。但是在这种情况下,您所做的基本上就是复制处置将为您做的事情。除了您在第二个代码示例中吞下任何有问题的错误外。 =)
标签: c# asp.net .net stored-procedures