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();    
}

这是正确的方法吗?你怎么能看到哪个连接(在哪个桌子上)被阻止了?

谢谢你。

[编辑]您知道强制关闭所有连接而不会卡住的命令吗?

4

3 回答 3

2

我在打开和关闭连接时使用的一般模式是这样的:(取自我关于 using 语句的问题的旧答案。)这种模式会在连接应该关闭时自动关闭。(退出 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*/ 
   }

}
于 2012-12-27T16:47:49.283 回答
1

尝试使用这个:

using (SqlCeCommand cmd = new SqlCeCommand(cmdSQL))    
{
    cmd.Connection = (SqlCeConnection)this.SqlConnection;    
    var r = cmd.ExecuteScalar(CommandBehavior.CloseConnection);    
}
于 2012-12-27T17:23:56.833 回答
0

这确实是关闭连接的一种方法,我真的在任何地方都使用它以避免通过使用 try catch 语句来混乱代码,顺便说一句,您可以在您的版本中使用 yield 关键字。但不是try catch。:)

于 2012-12-27T17:00:08.537 回答