Usuário com melhor resposta
stored procedure X Transaction no SQL 2005

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.
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!
- Editado Israel Vilela quinta-feira, 14 de março de 2013 17:41
- Marcado como Resposta Leonardo Petrarca quinta-feira, 14 de março de 2013 17:55
-
Grato pela solução Israel...
Abraços.
- Marcado como Resposta Leonardo Petrarca 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!
- Editado Israel Vilela quinta-feira, 14 de março de 2013 17:41
- Marcado como Resposta Leonardo Petrarca quinta-feira, 14 de março de 2013 17:55
-
Grato pela solução Israel...
Abraços.
- Marcado como Resposta Leonardo Petrarca quinta-feira, 14 de março de 2013 17:55