我的假设是,如果Sqlconnection在使用语句中打开,则在执行语句后将自动发生dispose事件,如果我强制关闭与Using Statement中的连接将会发生什么是坏事练习?
using (SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["Constring"]))
{
// SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["Constring"]);
conn.Open();
String query = String.Empty;
query = "exec " + StoredProcedure + " " + sampleproc + "";
using (SqlDataAdapter mainTableAdapter = new SqlDataAdapter(query, conn))
{
System.Data.DataSet mainTableDS = new System.Data.DataSet();
mainTableAdapter.Fill(mainTableDS);
conn.Close();
mainTableAdapter.Dispose();
conn.Dispose();
return mainTableDS;
}
}
答案 0 :(得分:2)
无需同时调用Close()
和Dispose()
;调用Dispose()
将自动关闭连接并处置该对象。
无需在Close()
块内调用Dispose()
或using
。 using
语句自动处理对象(由于上面的#1也会关闭连接)。
另外,关于#2的注释。如果Microsoft的guidance is followed:
, 可以安全地多次拨打Dispose()
如果对象的Dispose方法被多次调用,则该对象 必须忽略第一个之后的所有呼叫。该对象不得抛出 如果多次调用Dispose方法,则会出现异常。例 Dispose以外的方法可以在何时抛出ObjectDisposedException 资源已经处理完毕。
答案 1 :(得分:1)
我只是将其添加为答案,因为它不适合评论,但除了其他答案中的所有内容外,您还无需致电conn.Open().
{{1} }方法会为你照顾它。上面的整个20行样本可以简化为这个简短的8行代码段而不会丢失任何功能:
Fill()