Web 服务调用数据库两次



我有一个非常简单的Web服务函数,它从数据库中提取数据并将其返回给用户。 但是,我最近发现(通过数据库端的日志记录(调用正在执行两次。 我已经将其缩小到导致问题的网络服务......如果我通过本地主机上的浏览器打开服务,然后直接执行它,SQL 日志显示它在大约 1/100 秒内运行了两次。

我正在包含我的代码作为指导。 内置VS2008。

<WebMethod()> _
Public Function MY_DATABASE_QUERY() As DataSet
    Dim DS As New DataSet
    Dim DA As New SqlDataAdapter
    Dim Cmd As New SqlCommand
    With Cmd
        .Connection = Connection()
        .CommandType = CommandType.StoredProcedure
        .CommandText = "SOME_STORED_PROCEDURE"
        .Connection.Open()
        .ExecuteReader()
        .Connection.Close()
        DA.SelectCommand = Cmd
        DA.Fill(DS)
    End With
    Return DS
End Function

Connection(( 函数只是从 web.config 中提取加密的连接字符串,对其进行解密,然后返回对象:

Public Function Connection() As SqlConnection
    Dim R As New Rijndael
    Return New SqlConnection(R.DecryptString128Bit(System.Configuration.ConfigurationManager.ConnectionStrings("ConnString").ToString, "S0ME_HA$H_C0D3"))
End Function

。基本上就是这样。 它尽可能简单明了。

考虑到这一点,有没有人知道为什么它会像现在这样,以及我将来如何防止这种情况? 对于这个查询来说没什么大不了的,但如果它是在(例如(购买或付款时进行的,这可能是一件大事。

发生这种情况是因为您在填充数据集之前调用了Cmd.ExecuteReader()。删除此调用。试试这个:

    Dim DS As New DataSet
    Dim DA As New SqlDataAdapter
    Dim Cmd As New SqlCommand
    With Cmd
        .Connection = Connection()
        .CommandType = CommandType.StoredProcedure
        .CommandText = "SOME_STORED_PROCEDURE"
        .Connection.Open()
        DA.SelectCommand = Cmd
        DA.Fill(DS)
        .Connection.Close()
    End With
    Return DS

尝试删除 .ExecuteReader(( 在准备 SQLCommand 时。调用数据适配器的 Fill 方法时,它会再次执行该命令。

最新更新