How to extend the timeout of a SQL query

前端 未结 6 1839
没有蜡笔的小新
没有蜡笔的小新 2021-02-11 14:21

This is not a connection timeout as a connection to the database is made fine. The problem is that the stored procedure that I\'m calling takes longer than, say, 30 seconds and

相关标签:
6条回答
  • 2021-02-11 14:39

    Timeout can occur due to a Microsoft issue. Seems to still occur on my Windows 8 system.

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

    0 讨论(0)
  • 2021-02-11 14:40

    I think this might be a better way to do this (as of Enterprise Library 6.0):

    SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString);
    System.Data.Common.DbCommand cmd = db.GetStoredProcCommand(storedProc, parameterValues);
    cmd.CommandTimeout = 600;
    return db.ExecuteScalar(cmd);
    
    0 讨论(0)
  • 2021-02-11 14:44

    Mladen is right but if you have to do this you probably have a bigger problem with the proc itself. Under load it might take much longer than your new timeout. Might be worth spending some quality time with the proc to optimize.

    0 讨论(0)
  • 2021-02-11 14:45

    Try this one

    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();
    
    0 讨论(0)
  • 2021-02-11 14:47

    If you are using the EnterpriseLibrary (and it looks like you are) try this:

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

    Edited to handle the paramValues array directly based on the comments. I also included your ConnectionString value:

    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();
    
    0 讨论(0)
  • 2021-02-11 14:57

    you do this by setting the SqlCommand.CommandTimeout property

    0 讨论(0)
提交回复
热议问题