Dot-Net

SqlCommand.Dispose 是否關閉連接?

  • September 13, 2008

我可以有效地使用這種方法嗎?

using(SqlCommand cmd = new SqlCommand("GetSomething", new SqlConnection(Config.ConnectionString))
{
   cmd.Connection.Open();
   // set up parameters and CommandType to StoredProcedure etc. etc.
   cmd.ExecuteNonQuery();
}

我擔心的是:SqlCommand 的 Dispose 方法(退出 using 塊時呼叫)是否會關閉底層 SqlConnection 對象?

不,處置SqlCommand不會影響連接。更好的方法是也將其包裝SqlConnection在 using 塊中:

using (SqlConnection conn = new SqlConnection(connstring))
{
   conn.Open();
   using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
   {
       cmd.ExecuteNonQuery();
   }
}

否則,連接不會因為使用它的命令被處置而改變(也許這就是你想要的?)。但請記住,連接也應該被處理掉,而且處理起來可能比命令更重要。

編輯:

我剛剛測試了這個:

SqlConnection conn = new SqlConnection(connstring);
conn.Open();

using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
   Console.WriteLine(cmd.ExecuteScalar().ToString());
}

using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
   Console.WriteLine(cmd.ExecuteScalar().ToString());
}

conn.Dispose();  

第一個命令在 using 塊退出時被釋放。連接仍然打開並且對第二個命令有好處。

因此,處理命令絕對不會處理它正在使用的連接。

引用自:https://stackoverflow.com/questions/60919