使用SqlCommand执行存储过程时如何防止超时错误?

时间:2014-09-23 09:55:54

标签: c# .net sql-server sqlclient

我有一个运行存储过程的C#程序。如果我从Microsoft SQL Server管理工作室运行存储过程,它工作正常。执行大约需要30秒。但是,如果我尝试从C#程序运行相同的存储过程,它会超时,即使我已将连接字符串中的超时设置为10分钟。

using (connection1 = new SqlConnection("user id=user_id_goes_here;password=password_goes_here;initial catalog=database_name_goes_here;data source=server_name_goes_here;connection timeout=600))

似乎在大约30秒后超时,即使我已将其设置为允许10分钟(用于测试目的)。

4 个答案:

答案 0 :(得分:22)

连接超时仅用于连接数据库。

CommandTimeout类有一个单独的SqlCommand属性,使用此属性指定执行超时。

using (SqlCommand cmd = new SqlCommand())
{
  cmd.Connection = connection1;
  cmd.CommandTimeout = 240; //in seconds
  //etc...
}

答案 1 :(得分:6)

使用命令的SqlCommand.CommandTimeout属性,而不是在连接字符串中指定它。

请参阅MSDN以供参考。

答案 2 :(得分:2)

您需要在代码中设置它,即通过设置sql命令对象的CommandTimeout属性。

连接字符串中的参数'连接超时' 表示在终止尝试并生成错误之前尝试建立连接时等待的时间。它不是查询执行超时的时间。

谢谢,我几周前也面临同样的问题,并且在webconfig与命令对象中的超时值之间感到困惑。你的问题清除了我现在的疑问:)

reference link from msdn

答案 3 :(得分:1)

连接超时是指实际连接到SQL Server时允许的时间量。命令超时是指允许命令运行多长时间;在这种情况下,存储过程。 SqlCommand.CommandTimeout是您正在寻找的财产。