存储过程执行两次!

时间:2009-08-28 11:03:14

标签: vb.net stored-procedures

由于某种原因,我的存储过程都执行了两次!我有一个静态函数,它根据名称和参数运行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 个答案:

答案 0 :(得分:12)

您手动执行一次(cmd.ExecuteNonQuery()),然后适配器将执行一次(New SqlDataAdapter(cmd)... Fill(...))。这样两次。你的意思是为适配器使用不同的命令吗?

答案 1 :(得分:6)

您正在运行存储过程两次,一次是cmd.ExecuteNonQuery,然后是第二次运行lAdapter.Fill。