So che c'è un'altra domanda con quasi lo stesso titolo, ma non risponde alla mia domanda. Ho una stored procedure, che restituisce l'identificatore univoco dopo l'inserimento (@@ identity). L'ho provato nel server explorer e funziona come previsto (@RETURN_VALUE = [identificatore]). Nel mio codice ho aggiunto un parametro chiamato "@RETURN_VALUE", con la direzione ReturnValue prima di qualsiasi altro parametro, ma mentre eseguo la mia query con ExecuteNonQuery() quel parametro rimane vuoto. Non so cosa ho fatto di sbagliato. mio SPROC:Ottenere il valore di ritorno dalla stored procedure in ADO.NET
ALTER PROCEDURE dbo.SetAuction
(
@auctionID int,
@itemID int,
@auctionType tinyint,
@reservationPrice int,
@maxPrice int,
@auctionEnd datetime,
@auctionStart datetime,
@auctionTTL tinyint,
@itemName nchar(50),
@itemDescription nvarchar(MAX),
@categoryID tinyint,
@categoryName nchar(50)
) AS
IF @auctionID <> 0
BEGIN
BEGIN TRAN T1
UPDATE Auction
SET AuctionType = @auctionType,
ReservationPrice = @reservationPrice,
MaxPrice = @maxPrice,
AuctionEnd = @auctionEnd,
AuctionStart = @auctionStart,
AuctionTTL = @auctionTTL
WHERE AuctionID = @auctionID;
UPDATE Item
SET
ItemName = @itemName,
ItemDescription = @itemDescription
WHERE
ItemID = (SELECT ItemID FROM Auction WHERE AuctionID = @auctionID);
COMMIT TRAN T1
RETURN @auctionID
END
ELSE
BEGIN
BEGIN TRAN T1
INSERT INTO Item(ItemName, ItemDescription, CategoryID)
VALUES(@itemName, @itemDescription, @categoryID);
INSERT INTO Auction(ItemID, AuctionType, ReservationPrice, MaxPrice, AuctionEnd, AuctionStart, AuctionTTL)
VALUES(@@IDENTITY,@auctionType,@reservationPrice,@maxPrice,@auctionEnd,@auctionStart,@auctionTTL);
COMMIT TRAN T1
RETURN @@IDENTITY
END
E il mio codice è:
cmd.CommandText = cmdText;
SqlParameter retval = new SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int);
retval.Direction = System.Data.ParameterDirection.ReturnValue;
cmd.Parameters.Add(retval);
cmd.Parameters.AddRange(parameters);
cmd.Connection = connection;
connection.Open();
cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@RETURN_VALUE"].Value;
Quando dici "vuoto" - stai ricevendo un'eccezione dicendo che "Valore" è nullo? (Il cast fallirebbe se fosse nullo). O è 0? –
Il valore è 0. – WebMonster
BTW, '@@ IDENTITY' è pericoloso; dovresti usare 'SCOPE_IDENTITY()'. –