这不是一个连接超时为数据库建立连接的罚款。 问题是,我正在调用存储过程需要更长的时间比,也就是说,30秒,导致超时。
该函数的代码看起来是这样的:
SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString);
return db.ExecuteScalar(Enum.GetName(typeof(StoredProcs), storedProc), parameterValues);
该的ExecuteScalar调用超时。 如何延长这个函数的超时时间?
为了快速存储过程,它工作正常。 但是,其中一项功能需要一段时间,呼叫失败。 我似乎无法找到任何方式来扩展时的ExecuteScalar函数被调用这样的超时时间。
如果您使用的是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();
您可以通过设置做到这一点SqlCommand.CommandTimeout属性
我觉得这可能是一个更好的方式来做到这一点(如企业库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);
试试这个
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();
姆拉登是正确的,但如果你要做到这一点,你可能有与PROC本身更大的问题。 在负载可能需要比你的新的超时时间长得多。 可能是值得花一些时间与PROC优化。
超时可由于微软的问题发生。 似乎我的Windows 8系统上仍时有发生。
http://support.microsoft.com/kb/2605597?wa=wsignin1.0