Dot-Net
SqlCommand.Dispose 是否關閉連接?
我可以有效地使用這種方法嗎?
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 塊退出時被釋放。連接仍然打開並且對第二個命令有好處。
因此,處理命令絕對不會處理它正在使用的連接。