从.NET超时但不从sql-server控制台超时

时间:2014-04-24 08:19:13

标签: sql-server vb.net

我有一个查询,从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

2 个答案:

答案 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;