获取.NET中的auto_increment值

时间:2013-01-30 17:38:04

标签: asp.net .net sql-server vb.net tsql

我对.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',有谁可以告诉我我做错了什么?

2 个答案:

答案 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代码进行任何更改。