我试图习惯于用“使用”在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();
}
}
您应该阅读这篇文章。它很好地解释了它; http://msdn.microsoft.com/en-GB/library/yh598w02.aspx。特别是,看一下代码片段,它显示了编译器实际将使用的“using”语句的内容。 – 2013-03-26 14:17:52
try/catch/finally是在iDisposable对象内执行的,所以在这种情况下不需要执行try/catch/finally。如果你有其他一些需要捕获/最终用于其他目的的逻辑,你可能仍然需要它。但在这种情况下,你所做的基本上都是复制出售给你的东西。除了在第二个代码示例中你正在吞咽任何有问题的错误。 =) – 2013-03-26 14:18:40