命令超时被忽略

Command Timeout being ignored

我使用这个函数来检查与数据库服务器的连接是否有效,我设置了 3 秒的超时,但是当服务器不可用时,大约需要 45 秒才能捕获错误。为什么忽略 CommandTimeout?

bool CheckDbConn()
{
  try
  {
    using (MyDB db=new MyDB(GetCustomConnString()))
    {
      db.Database.CommandTimeout = 3;
      var someEntity =  db.SomeSet.FirstOrDefault();
      return true; // connection ok
    }
  }
  catch (Exception ex)
  {
   // catches error after 45 seconds
   return false; // error connecting server;
  }
}

你需要的是ConnectionTimeout

CommandTimeout 用于限制命令运行的时间。

只是为了完成 Justin 的回答,

这个属性是只读的,你必须把它添加到conn字符串


static private string GetConnectionString()
{
    return "Data Source=(local);Initial Catalog=AdventureWorks;"
        + "Integrated Security=SSPI;Connection Timeout=30";
}

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.connectiontimeout?redirectedfrom=MSDN&view=dotnet-plat-ext-3.1#System_Data_SqlClient_SqlConnection_ConnectionTimeout