如何扩展SQL查询的超时

Bol*_*ait 34 .net c# sql timeout

这不是连接超时,因为与数据库的连接正常.问题是我正在调用的存储过程花费的时间超过30秒并导致超时.

该函数的代码如下所示:

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

ExecuteScalar调用超时.如何延长此功能的超时时间?

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

Chr*_*ter 30

如果您正在使用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();
Run Code Online (Sandbox Code Playgroud)

编辑直接根据注释处理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();
Run Code Online (Sandbox Code Playgroud)


Mla*_*dic 23

您可以通过设置SqlCommand.CommandTimeout属性来执行此操作

  • 如果我使用的是SqlCommand,哪个会很好用...但是,我不是. (3认同)
  • 是的,你是.SqlDatabase不是标准数据提供者的一部分; 它是某人编写的包装类,它将在内部使用SqlCommand对象. (3认同)
  • 但是,"某人"可能是Microsoft,这是Microsoft.Practices.EnterpriseLibrary中的SQLDatabase类吗? (3认同)

小智 6

我认为这可能是一种更好的方法(从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);
Run Code Online (Sandbox Code Playgroud)