2010-01-18 57 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