2010-07-26 167 views
2

我有一个函数用于通过ODBC将写查询发送到DB2,并且如果我失去与DB2的连接,它会不时在此函数中挂起。我发送60作为我的超时功能,但它永远不会超时。它只是无限期地挂起我的线程,我不确定强制这个函数放弃的好方法。ODBC连接到DB2挂起

public int WriteQuery(string query, string dbConnStr, int timeout) 
{ 
    int rowsAffected = -1; 
    OdbcConnection conn = new OdbcConnection(dbConnStr); 

    try 
    { 
      conn.Open(); 
      OdbcCommand command = new OdbcCommand(query, conn); 
      command.CommandTimeout = timeout; 

      OdbcTransaction trans = conn.BeginTransaction(); 
      command.Transaction = trans; 

      OdbcDataAdapter adapter = new OdbcDataAdapter(command); 
      adapter.UpdateCommand = command; 

      rowsAffected = command.ExecuteNonQuery(); 
      trans.Commit(); 
     } 
     catch(Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      conn.Close(); 
      conn.Dispose(); 
     } 

     return rowsAffected; 
    } 
} 
+0

你知道哪个声明是挂断的吗?我没有看到任何类型的日志语句,所以我猜你不确定,除非在调试器中执行代码时看到这种情况。 – 2010-07-26 17:38:21

回答

0

无论如何,你是用同样的方法打开和关闭连接。 尝试使用:OdbcConnection.ConnectionTimeout = 60;

希望这会有所帮助!