2010-01-18 64 views
0

如果我有這樣的事情:的SqlCommand和SqlConnection的

using(SqlCommand sqlCmd = CreateSqlCommand("load_collection_get", false)) 
{ 
    // Code 
} 

CreateSqlCommand樣子:

public static SqlCommand CreateSqlCommand(string storedProc, bool transaction) 
    { 
     SqlCommand sqlCmd = new SqlCommand(storedProc, sqlHelper.GetConnection()); 

     sqlCmd.CommandType = System.Data.CommandType.StoredProcedure; 

     if(transaction) 
      sqlCmd.Transaction = sqlHelper.GetTransaction(); 

     return (sqlCmd); 
    } 

SqlHelper.GetConnection()返回打開SqlCommand對象

在的結束使用(SqlCommand ...)會關閉我的連接?或者我還需要在使用結束之前調用SqlConnection.Close?

回答

5

不,你仍然必須自己關閉SqlConnection,使用它只會處理SqlCommand對象。

我傾向於這樣想:您可能需要爲多個命令打開連接,也許所有連接都在SqlTransaction中運行。如果處置第一個命令關閉了連接,那麼您將無法運行後續命令,更不用說提交事務了。

+0

+1。值得強調的是,Dispose of SqlCommand不會關閉連接,我認爲這是因爲它可能不是唯一在這個連接上運行的東西。 – 2010-01-18 10:05:54

+0

好的謝謝,不是我希望的答案,但可以aee爲什麼是這樣,另一個使用(SqlConnection ...)需要我認爲! – Jay 2010-01-18 10:31:33

+0

@Yossi Dahan絕對,加上你可能需要不止一個命令來操作連接(也許都包含在SqlTransaction中)。我已經更新了我的答案,以包括這一點。 – 2010-01-18 10:37:34