Tôi biết rằng có một câu hỏi khác có cùng tiêu đề, nhưng nó không trả lời câu hỏi của tôi. Tôi có một thủ tục được lưu trữ, trả về mã định danh duy nhất sau khi chèn (@@ identity). Tôi đã thử nó trong trình thám hiểm máy chủ và nó hoạt động như mong đợi (@RETURN_VALUE = [số nhận dạng]). Trong mã của tôi, tôi đã thêm một tham số được gọi là "@RETURN_VALUE", với hướng ReturnValue trước, hơn bất kỳ tham số nào khác, nhưng khi tôi chạy truy vấn của mình với ExecuteNonQuery(), tham số đó vẫn trống. Tôi không biết mình đã làm gì sai. SPROC của tôi:Nhận giá trị trả về từ thủ tục lưu sẵn trong 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
Và mã của tôi là:
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;
Khi bạn nói 'trống' - bạn đang nhận được một ngoại lệ nói rằng 'Giá trị' là null? (Các diễn viên sẽ thất bại nếu nó là null). Hay là 0? –
Giá trị là 0. – WebMonster
BTW, '@@ IDENTITY' rất nguy hiểm; bạn nên sử dụng 'SCOPE_IDENTITY()' để thay thế. –