如果在连接字符串中没有指定超时,那么从vb.net调用存储过程时是否存在默认的SQL超时时间?
我不确定连接字符串中是否指定了CommandTimeout
但是我正在浏览所有可能性。
示例如果在30秒(或更长时间)之后没有结果抛出:
`System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.`
SQL事件探查器说,当程序超时时,脚本会在30秒内运行并结束。
脚本在SQL Server中自行运行大约1分45秒,无错误。
答案 0 :(得分:5)
执行SQL的超时值未存储在连接字符串中,它存储在SqlCommand
SqlCommand.CommandTimeout
中。
默认为30秒。
答案 1 :(得分:1)
SqlCommand cmd;
.....
cmd.CommandTimeout = 120;
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx
答案 2 :(得分:1)
Ther是SqlClient可以引发的两种类型的超时异常 对象:SqlConnection和SqlCommand。
当应用程序尝试建立时,会引发SqlConnection 超时异常 连接但在给定时间段内未成功。我相信这是500秒。
SqlCommand 超时决定命令的执行时间 使用SQLCommand等待SQL Server完成的应用程序 操作。这个是30秒。
设置SQLCommand时,将CommandTimeout更改为更高
例如。
cmd.CommandTimeout = 300
答案 3 :(得分:0)
最佳做法是尝试将SQL改进为在不到30秒的时间内运行。这比增加VB超时长度要好得多。
要获得有关SQL性能问题的最佳帮助,请发布以下内容:
显示执行计划。在SQL Server Management Studio中运行以下命令:
SET SHOWPLAN_XML ON
然后运行你的慢速sql。不会运行实际查询,但执行计划将以xml格式显示。
答案 4 :(得分:0)
如果使用Entity Framework,则ModelsContainer上也存在CommandTimeout:
Using dbcontext As New MyDatabase.ModelsContainer()
dbcontext.CommandTimeout = 120
'Linq command'
End Using