我使用的模式看起来像这样经常。我想知道这是否正常,或者是否有我不在这里申请的最佳做法。当引发异常时,确保SQL连接关闭的正确方法是什么?
具体我想知道;在引发异常的情况下,我在finally块中的代码足以确保连接适当关闭?
public class SomeDataClass : IDisposable
{
private SqlConnection _conn;
//constructors and methods
private DoSomethingWithTheSqlConnection()
{
//some code excluded for brevity
try
{
using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
{
_SqlConnection.Open();
countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
}
}
finally
{
//is this the best way?
if (_SqlConnection.State == ConnectionState.Closed)
_SqlConnection.Close();
}
//some code excluded for brevity
}
public Dispose()
{
_conn.Dispose();
}
}
呃......你为什么要检查的连接关闭之前已经关闭?为什么使用类成员来存储连接,如果你要使用它的唯一方法关闭它? – Shog9 2008-09-26 18:46:33
spoon16包含短语“//为了简洁排除某些代码”。由此我推断这不是使用它的唯一方法。 – 2008-09-26 18:52:41
是正确的,这绝对是我能想到的最简单的例子。我认为,由于连接池,我不需要尝试存储每个方法范围之外的SqlConnection对象。所以只要使用USING作为其他建议。 – 2008-09-26 20:19:35