Web服务调用数据库两次

时间:2013-09-30 17:17:47

标签: .net sql sql-server web-services

我有一个非常简单的Web服务功能,它从数据库中提取数据并将其返回给用户。但是我最近发现(通过登录数据库端)该呼叫正在执行TWICE。我把它缩小到引起问题的web服务......如果我通过localhost上的浏览器打开服务然后直接执行它,那么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

......基本上就是这样。它就像你能得到的一样简单。

考虑到这一点,是否有人知道为什么它的表现如此,以及我将来如何防止这种情况?对于这个查询来说没什么大不了的,但如果它(例如)购买或付款的话,这可能是一件非常重要的事情。

2 个答案:

答案 0 :(得分:3)

这是因为您在填充DataSet之前调用了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

答案 1 :(得分:1)

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