2014-09-23 59 views
9

我有一个运行存储过程的C#程序。如果我从Microsoft sql server management studio运行存储过程,它工作正常。它需要大约30秒的时间来执行。但是,如果我尝试从C#程序运行相同的存储过程,它会超时,即使我已将连接字符串中的超时设置为10分钟。如何在使用SqlCommand执行存储过程时防止出现超时错误?

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)) 

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

+1

你打电话过程如何?管理工作室需要30秒钟的时间不应该花费C#10分钟,除非您在某处破坏索引或统计信息时发生错误。 – 2014-09-25 16:26:57

回答

17

连接中的超时仅用于连接到数据库。

SqlCommand类有一个单独的CommandTimeout属性,我认为这是你用来执行存储过程的东西。使用此属性来指定执行超时。

即,

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

如果你使用0,这意味着没有限制。 – Juan 2014-09-24 12:48:11

+2

只是要指出,这只是针对该问题的“乐队援助”。通过解决潜在的问题,最好弄清楚为什么你首先得到暂停。 – 2014-09-24 20:47:39

+1

@ChrisDunaway我假设你从未在大型数据库上工作过?我曾经在项目SPs中工作了几个小时,整合了terabyte级别的数据集。有时候你只需要时间来做事。 – TomTom 2014-09-25 12:06:14

6

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

请参阅MSDN以供参考。

2

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

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

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

reference link from msdn

1

连接超时是指允许的时间居然同时连接到SQL Server的金额。命令超时指的是命令运行允许的时间长度;在这种情况下,存储过程。 SqlCommand.CommandTimeout是你正在寻找的财产。

相关问题