我对.NET和SQL Server比较陌生。我试图从.NET执行存储过程并获取auto_increment值。这是我在.NET(VB.NET)中的代码:
myComm.Parameters.AddWithValue("@newkey", newKey)
myComm.Parameters.AddWithValue("@newimg", DirectCast(imgByteArray, Object))
Dim resultReader As SqlDataReader = myComm.ExecuteReader
Dim resultId As Integer
While resultReader.Read
resultId = resultReader.GetInt16("@returnid")
End While
这是我的存储过程:
-- Add the parameters for the stored procedure here
@newkey nvarchar(MAX),
@newimg varbinary(MAX),
@returnid integer = 0
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.AmazonS3Preview(myKey,previewImage) VALUES (@newkey,@newimg)
SET @returnid=(SELECT @@IDENTITY AS [@@IDENTITY])
END
目前在.NET中我resultId
总是'0',有谁可以告诉我我做错了什么?
答案 0 :(得分:3)
您正在设置值但不返回它。甚至不需要设置变量。最后一行:
SELECT SCOPE_IDENTITY() as returnid
然后使用ExecuteScalar来获取returnId:
myComm.Parameters.AddWithValue("@newkey", newKey)
myComm.Parameters.AddWithValue("@newimg", DirectCast(imgByteArray, Object))
Dim resultId As Integer
resultId = Convert.ToInt32(myComm.ExecuteScalar())
答案 1 :(得分:0)
在存储过程中,您将参数returnid设置为该值。但是在您的代码中,您正在从select语句中捕获输出。我将存储过程更改为:
-- Add the parameters for the stored procedure here
@newkey nvarchar(MAX),
@newimg varbinary(MAX)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.AmazonS3Preview(myKey, previewImage)
OUTPUT Inserted.ID
VALUES (@newkey, @newimg)
END
两个变化。首先,删除returnid参数。其次,使用SP中的Output子句来获取id。这应该工作,而无需对您的vb.net代码进行任何更改。