我知道有几乎相同的标题有另一个问题,但它不回答我的问题。 我有一个存储过程,它在插入后返回唯一标识符(@@ identity)。我在服务器资源管理器中试过,它按预期工作(@RETURN_VALUE = [identifier])。 在我的代码中,我添加了一个名为“@RETURN_VALUE”的参数,其返回值的方向优先于任何其他参数,但是当我使用ExecuteNonQuery()运行查询时,该参数仍为空。我不知道我做错了什么。 我的存储过程:在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
而且我的代码是:
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;
当你说'空' - 你会得到一个异常说'价值'为空? (如果它为空,则投射失败)。还是0? – 2010-07-22 13:17:44
它的值为0. – WebMonster 2010-07-22 13:20:47
顺便说一句,'@@ IDENTITY'是危险的;你应该使用'SCOPE_IDENTITY()'来代替。 – 2010-07-22 13:21:07