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

Få en returværdi i C# asp.net fra en lagret procedure (syntaksproblem)

For at indfange en RETURN VALUE (returneret af SQL ved hjælp af RETURN({number}) syntaksen), skal du bruge:

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

Du bør sandsynligvis også bruge SCOPE_IDENTITY() i stedet for @@IDENTITY

Rediger:
Så din sproc ville gøre noget som:

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

Og din C#-kode til at hente denne værdi ville være:

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

Rediger 2:
Ok, det oprindelige spørgsmål forvirrede problemet, da "afkastværdien" er en anden ting end det, du rent faktisk gør, hvilket er at returnere et enkelt kolonneresultatsæt.

LÆG IKKE i stedet tilføje en ReturnValue parameter overhovedet. Brug bare ExecuteScalar() ved at bruge din originale SqlCommand-opsætning som nedenfor:

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


  1. Sådan opgraderes PostgreSQL 11 til PostgreSQL 12 med nul nedetid

  2. MySQL Group_Concat gentagne værdier

  3. Begrænsning af en kolonne til kun at acceptere 2 værdier

  4. MySQL - Mac - Fejl 2002 - Kan ikke oprette forbindelse til lokal... gennem socket