Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obtendo um valor de retorno em C# asp.net de um procedimento armazenado (problema de sintaxe)


Para capturar um RETURN VALUE (retornado pelo SQL usando a sintaxe RETURN({number})) use:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

Além disso, você provavelmente deve estar usando SCOPE_IDENTITY() em vez de @@IDENTITY

Editar:
Então seu sproc faria algo como:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)

E seu código C# para recuperar esse valor seria:
int newId = cmdHeader.Parameters[@ReturnValue].value;

Editar 2:
Ok, a pergunta original confundiu o problema, pois o "valor de retorno" é uma coisa diferente do que você está realmente fazendo, que é retornar um conjunto de resultados de uma única coluna.

Então, em vez disso, NÃO adicione um parâmetro ReturnValue. Basta usar ExecuteScalar() usando sua configuração original do SqlCommand conforme abaixo:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());