2012-12-27 249 views
1

關閉我的數據庫我使用這個:SqlConnection.Close(); 但我的應用程序是停留在這個方法...關閉數據庫連接

我每次訪問我做這個數據庫:

string cmdSQL = "select min(shortAddress) from FreeShortAddress"; 

using (SqlCeCommand cmd = new SqlCeCommand(cmdSQL))  
{ 
    cmd.Connection = (SqlCeConnection)this.SqlConnection;  
    var r = cmd.ExecuteScalar();  
} 

是正確的方式,你怎麼能看到哪些連接(上表)被封鎖?

謝謝。

[編輯]你知道一個強制關閉所有連接而不被卡住的命令嗎?

+0

肯定。我在回答 – Kevin

回答

2

打開和關閉連接時使用的一般模式如下所示:(取自an older answer of mine on a question about the using statement。)此模式在應該關閉時自動關閉連接。 (在退出using語句)

using (SqlConnection connection = new SqlConnection(connectionString)) 
{  
    int employeeID = findEmployeeID();  
    try  
    { 

      connection.Open(); 
      SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection); 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID)); 
      command.CommandTimeout = 5; 

      command.ExecuteNonQuery();  
    } 
    catch (Exception) 
    { 
     /*Handle error*/ 
    } 

} 
0

這的確是一個辦法,同時關閉連接去,我真正使用它無處不在,通過使用try catch語句的代碼,以避免混亂,順便說一句,你可以在你的版本中使用關鍵字yield 。 。 但不嘗試捕捉:)

1

嘗試使用這樣的:

using (SqlCeCommand cmd = new SqlCeCommand(cmdSQL))  
{ 
    cmd.Connection = (SqlCeConnection)this.SqlConnection;  
    var r = cmd.ExecuteScalar(CommandBehavior.CloseConnection);  
} 
+0

中發佈的內容好吧,但後來在我的代碼中,我做了同樣的事情,但我沒有使用ExecuteScalar。當我關閉SqlCeCommand時,連接是否也關閉? – user1932593

+0

它適用於所有的執行:http://msdn.microsoft.com/en-us/library/system.data.commandbehavior(v=vs.100).aspx如果你是以後不需要關閉它與你的執行一起使用 – Kevin