none
stored procedure X Transaction no SQL 2005 RRS feed

  • Pergunta

  • Boa tarde a todos, desenvolvo em Visual Basic 2010 com o SQL 2005 e estou com uma dúvida em relação a transação usando 2 Stored Procedure armazenada no banco:

    Segue o exemplo abaixo:

           'Aqui começa a transação...

            Dim cnn As New SqlClient.SqlConnection(CnnFin)

            cnn.Open()

            Dim Transacao As SqlClient.SqlTransaction = cnn.BeginTransaction()

            Dim cmd As SqlClient.SqlCommand = cnn.CreateCommand

            cmd.Transaction = Transacao

            Try

                'Salva na tabela a usando a SP a_Add...

                cmd.CommandText = "a_Add"

                cmd.CommandType = CommandType.StoredProcedure

                cmd.Parameters.Add("@NomeCli", SqlDbType.VarChar)

                cmd.Parameters("@NomeCli").Value = "Leonardo"

                cmd.ExecuteNonQuery()

                'Salva na tabela b usando a SP b_Add...

                cmd.CommandText = "b_Add"

                cmd.CommandType = CommandType.StoredProcedure

                cmd.Parameters.Add("@NomeFor", SqlDbType.VarChar)

                cmd.Parameters("@NomeFor").Value = "Paulo"

                cmd.ExecuteNonQuery()

                'consolida as transações...

                Transacao.Commit()

            Catch ex As Exception

                'cancela a transação...

                Transacao.Rollback()

                MessageBox.Show(ex.Message, Petra, MessageBoxButtons.OK,    

                        MessageBoxIcon.Error)

            Finally

                cnn.Close()

            End Try

    O estranho mais estranho é que:

                Se eu salvo somente a tabela a funciona certo.

                Se eu salvo somente a tabela b funciona certo.

                Se eu salvo as 2 tabelas que é a finalidade da transação aparece a mensagem na

                linha que está em negrito de vermelho:

                "Procedure or function b_Add has too many arguments specified."

    Alguém poderia me dar uma ajuda a respeito desse código ?

    Grato pela atenção.

    quinta-feira, 14 de março de 2013 17:30

Respostas

  • Olá

    Faltou limpar os parâmetros depois de executar a primeira procedure, depois de chamar o primeiro ExecuteNonQuery() faça o seguinte:

    cmd.Parameters.Clear()

    ou instancie um novo objeto SqlCommand e vincule a a mesma conexao/transação para executar a segunda procedure.


    Spartans! Tonight we dine in Hell!



    quinta-feira, 14 de março de 2013 17:38
  • Grato pela solução Israel...

    Abraços.

    quinta-feira, 14 de março de 2013 17:55

Todas as Respostas

  • Olá

    Faltou limpar os parâmetros depois de executar a primeira procedure, depois de chamar o primeiro ExecuteNonQuery() faça o seguinte:

    cmd.Parameters.Clear()

    ou instancie um novo objeto SqlCommand e vincule a a mesma conexao/transação para executar a segunda procedure.


    Spartans! Tonight we dine in Hell!



    quinta-feira, 14 de março de 2013 17:38
  • Grato pela solução Israel...

    Abraços.

    quinta-feira, 14 de março de 2013 17:55