【发布时间】:2013-01-30 17:38:03
【问题描述】:
我对 .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”,谁能告诉我我做错了什么?
【问题讨论】:
-
我还建议使用
SCOPE_IDENTITY()而不是其他任何东西来获取新插入的标识值。 See this blog post for an explanation as to WHY -
您在
AmazonS3Preview表上的主键设置正确吗? -
@@IDENTITY 也不是 O(1)。直到真正的桌子才出现。基本上没有理由不使用 SCOPE_IDENTITY()。
标签: asp.net .net sql-server vb.net tsql