Хранимые процедуры выполняются дважды! - PullRequest
2 голосов
/ 28 августа 2009

Почему-то все мои хранимые процедуры выполняются дважды! У меня есть статическая функция, которая запускает SP, учитывая его имя и параметры, и заполняет таблицу данных.

Public Shared Function RunSP(ByVal spName As String, ByRef spParams As Dictionary(Of String, String), ByRef pDataTable As DataTable) As Integer
    Dim cmd As New SqlCommand
    Dim lAdapter As SqlDataAdapter
    Try
        cmd.Connection = New SqlConnection(ConnectionString)
        cmd.Connection.Open()
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = spName

        For Each item As KeyValuePair(Of String, String) In spParams
            cmd.Parameters.AddWithValue(item.Key, item.Value)
        Next

        cmd.ExecuteNonQuery()
        If Not pDataTable Is Nothing Then
            lAdapter = New SqlDataAdapter(cmd)
            lAdapter.Fill(pDataTable)
        End If
        RunSP = 0
    Catch ex As Exception
        If (Not cmd Is Nothing) Then
            cmd.Dispose()
        End If
        RunSP = -1
    End Try
End Function

Что-то не так с кодом? Я проверил с отладчиком, и соответствующие SP определенно вызываются только один раз, то есть эта функция запускается только один раз для конкретной функции вставки, но в таблицу вставляются две вещи.

Ответы [ 2 ]

12 голосов
/ 28 августа 2009

Вы выполняете его один раз вручную (cmd.ExecuteNonQuery()), затем адаптер выполнит его один раз (New SqlDataAdapter(cmd)... Fill(...)). Таким образом, дважды. Вы хотели использовать другую команду для адаптера?

6 голосов
/ 28 августа 2009

Вы запускаете хранимую процедуру дважды, один в cmd.ExecuteNonQuery, а затем второй раз, когда вы запускаете lAdapter.Fill.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...