0

我对 .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中我总是得到'0' resultId,谁能告诉我我做错了什么?

4

2 回答 2

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())
于 2013-01-30T17:41:06.137 回答
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 代码进行任何更改的情况下工作。

于 2013-01-30T17:47:08.060 回答