代码之家  ›  专栏  ›  技术社区  ›  BoltBait

如何延长SQL查询的超时时间

  •  33
  • BoltBait  · 技术社区  · 16 年前

    SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString);
    return db.ExecuteScalar(Enum.GetName(typeof(StoredProcs), storedProc), parameterValues);
    

    对于快速存储过程,它可以正常工作。但是,其中一个函数需要一段时间,调用失败。当以这种方式调用ExecuteScalar函数时,我似乎找不到任何方法来延长超时时间。

    6 回复  |  直到 16 年前
        1
  •  36
  •   Chris Porter    16 年前

    如果您正在使用EnterpriseLibrary(看起来是这样),请尝试以下方法:

     Microsoft.Practices.EnterpriseLibrary.Data.Database db = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase("ConnectionString");
     System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("StoredProcedureName");
     cmd.CommandTimeout = 600;
     db.AddInParameter(cmd, "ParameterName", DbType.String, "Value");
    
     // Added to handle paramValues array conversion
     foreach (System.Data.SqlClient.SqlParameter param in parameterValues) 
     {
         db.AddInParameter(cmd, param.ParameterName, param.SqlDbType, param.Value);
     }
    
     return cmd.ExecuteScalar();
    

    编辑以直接基于注释处理paramValues数组。我还包括了您的ConnectionString值:

    Microsoft.Practices.EnterpriseLibrary.Data.Database db = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase(connectionManager.SqlConnection.ConnectionString);
    System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("StoredProcedureName", parameterValues);
    cmd.CommandTimeout = 600;
    return cmd.ExecuteScalar();
    
        2
  •  25
  •   Mladen Prajdic    16 年前

    您可以通过设置 SqlCommand.CommandTimeout 所有物

        3
  •  7
  •   Yakk - Adam Nevraumont    12 年前

    SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString);
    System.Data.Common.DbCommand cmd = db.GetStoredProcCommand(storedProc, parameterValues);
    cmd.CommandTimeout = 600;
    return db.ExecuteScalar(cmd);
    
        4
  •  4
  •   Ozgur    13 年前

    SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(connection.ConnectionString);
    connectionStringBuilder.ConnectTimeout = 180;
    connection.ConnectionString = connectionStringBuilder.ConnectionString;
    
    connection.Open();
    SqlCommand command = new SqlCommand("sp_ProcedureName", connection);
    command.CommandType = CommandType.StoredProcedure;
    command.CommandTimeout = connection.ConnectionTimeout;
    command.ExecuteNonQuery();
    connection.Close();
    
        5
  •  0
  •   n8wrl    16 年前

    Mladen是对的,但是如果你必须这样做,你可能会在proc本身有更大的问题。在加载情况下,可能需要比新超时更长的时间。也许值得花一些时间来优化进程。

        6
  •  0
  •   BSalita    12 年前

    超时可能由于Microsoft问题而发生。似乎仍在我的Windows 8系统上出现。

    http://support.microsoft.com/kb/2605597?wa=wsignin1.0