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属性来执行此操作
小智 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)