如何延长一个SQL查询超时(How to extend the timeout of a SQL q

2019-07-30 01:52发布

这不是一个连接超时为数据库建立连接的罚款。 问题是,我正在调用存储过程需要更长的时间比,也就是说,30秒,导致超时。

该函数的代码看起来是这样的:

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

该的ExecuteScalar调用超时。 如何延长这个函数的超时时间?

为了快速存储过程,它工作正常。 但是,其中一项功能需要一段时间,呼叫失败。 我似乎无法找到任何方式来扩展时的ExecuteScalar函数被调用这样的超时时间。

Answer 1:

如果您使用的是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();


Answer 2:

您可以通过设置做到这一点SqlCommand.CommandTimeout属性



Answer 3:

我觉得这可能是一个更好的方式来做到这一点(如企业库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);


Answer 4:

试试这个

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


Answer 5:

姆拉登是正确的,但如果你要做到这一点,你可能有与PROC本身更大的问题。 在负载可能需要比你的新的超时时间长得多。 可能是值得花一些时间与PROC优化。



Answer 6:

超时可由于微软的问题发生。 似乎我的Windows 8系统上仍时有发生。

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



文章来源: How to extend the timeout of a SQL query