Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottenere un valore di ritorno in C# asp.net da una stored procedure (problema di sintassi)

Per acquisire un VALORE RETURN (restituito da SQL utilizzando la sintassi RETURN({number})) utilizzare:

cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

Inoltre, probabilmente dovresti usare SCOPE_IDENTITY() invece di @@IDENTITY

Modifica:
Quindi il tuo sproc farebbe qualcosa del tipo:

DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)

E il tuo codice C# per recuperare quel valore sarebbe:

int newId = cmdHeader.Parameters[@ReturnValue].value;

Modifica 2:
Ok, la domanda originale ha confuso il problema in quanto il "valore di ritorno" è una cosa diversa da ciò che stai effettivamente facendo, ovvero restituire un set di risultati a colonna singola.

Quindi, invece NON aggiungere un parametro ReturnValue. Basta usare ExecuteScalar() utilizzando la configurazione originale di SqlCommand come di seguito:

int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());