我有一个查询,从sql-server控制台需要10秒,但是我用VB(语言)编写的程序得到超时。 可能是因为我从程序中获得超时但是从sqlserver控制台运行良好的原因是什么?
我的代码:
Public Shared Function GetDataSet(ByVal vCommandType As CommandType, ByVal strSQL As String, ByVal sqlParams() As SqlParameter) As DataSet
Dim oConn As New SqlConnection(bbdd.connectionString)
Dim DC As New SqlCommand()
DC.CommandTimeout = 600 --- with this, my query is works fine
DC.CommandText = strSQL
DC.CommandType = vCommandType
DC.Connection = oConn
If Not IsNothing(sqlParams) Then
DC.Parameters.AddRange(sqlParams)
End If
Dim DA As New SqlDataAdapter(DC)
Dim DS As New DataSet
Try
DA.Fill(DS)
Return DS
Catch ex As Exception
Throw ex
Finally
oConn.Close()
DA.Dispose()
End Try
End Function
答案 0 :(得分:0)
这很常见,可能有很多原因。 SQL Server可能为SSMS和您的应用程序使用不同的计划缓存。如果执行计划不同,执行时间可能会有很大差异。
SQL Server优化参数的特定值。因此,如果您发送的第一个查询使用的参数可以提供良好的执行计划,那么您很幸运。下一次调用同一查询将重用该计划。但是也可以选择给出错误执行计划的参数。这称为“参数嗅探”。
有关详细说明,请参阅Erland Sommarskog的Slow in the Application, Fast in SSMS。
答案 1 :(得分:0)
您可以在sqlcommand对象中设置超时,如下所示:
// Setting command timeout to 60 second
DC.CommandTimeout = 60;