我有一个运行存储过程的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分钟(用于测试目的)。
答案 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与命令对象中的超时值之间感到困惑。你的问题清除了我现在的疑问:)
答案 3 :(得分:1)
连接超时是指实际连接到SQL Server时允许的时间量。命令超时是指允许命令运行多长时间;在这种情况下,存储过程。 SqlCommand.CommandTimeout
是您正在寻找的财产。