Olá pessoal, Criei uma procedure para a simples inserção de um "Livro" em uma tabela. De acordo com a variável @cod passada, caso ela já exista no banco, é dado um UPDATE, caso contrário um INSERT.
Meu problema é que minha Procedure funciona perfeitamente executado via Managment Studio, porém via meu aplicativo C# ela sempre entra na rotina de INSERT, nunca na UPDATE, duplicando os dados a cada vez que salvo, e retornando um @cod sempre maior.
Abaixo meu código em C# e a procedure para análise:
--- C# ---
// Procedure de salvar título IDbCommand cm = new System.Data.SqlClient.SqlCommand(); cm.CommandText = "salvaTitulo"; cm.CommandType = CommandType.StoredProcedure;
// Pega novo código do título System.Data.SqlClient.SqlParameter paramSql; paramSql = (System.Data.SqlClient.SqlParameter)cm.Parameters["@cod"]; cod = (Int32)paramSql.Value;
--- Procedure ---
USE [livroteca] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].salvaTitulo @cod int output, @titulo varchar(255), @subtitulo varchar(255) AS SET NOCOUNT ON;
IF exists(SELECT id FROM titulos WHERE id = @cod) AND @cod > 0 BEGIN UPDATE titulos SET titulo = @titulo, subtitulo = @subtitulo WHERE id = @cod SET @cod = @cod END ELSE BEGIN INSERT INTO titulos (titulo, subtitulo) VALUES (@titulo, @subtitulo) SET @cod = @@identity END GO
Você está definindo o parâmetro @cod apenas como output. Uma das opções do ParameterDirection é InputOutput, experimente utilizar esta e verifique se resolve o problema.
Você está definindo o parâmetro @cod apenas como output. Uma das opções do ParameterDirection é InputOutput, experimente utilizar esta e verifique se resolve o problema.