2012-01-29 86 views
3

我用這個存儲過程進行插入和返回插入行的id插入後獲取ID在SQL Server中

ALTER PROCEDURE [dbo].[addObjective] 
(
      @Name nvarchar(250) 
      ,@ObjectiveGroupId int 
      ,@CreatorId int 
      ,@LanguageId int 
      ,@isFinal bit 
) 
as 
insert into Objective values 
(
      @Name 
      ,@ObjectiveGroupId 
      ,@CreatorId 
      ,GETDATE() 
      ,@LanguageId 
      ,@isFinal 
) 

    select scope_identity() as Id; 

但如何使用讀取使用vb.net代碼

返回的ID此命令將返回-1

回答

2

我假設你在VB.NET代碼中調用.ExecuteNonQuery()的返回值(你沒有向我們展示......所以我只能猜測)。

這是錯誤的讀取值 - 該值將返回受上次SQL語句影響的行數(例如,INSERT,UPDATEDELETE)。

由於存儲過程IS返回一個值 - 新插入的ID - 和它返回一個單列,單獨列的值(只是ID,沒有別的),你需要閱讀該值 - 例如通過調用.ExecuteScalar()代替:

Dim newID As Integer = CInt(yourInsertCmd.ExecuteScalar()) 
0
select * from (tablename) order by (id) DESC 
for x = 0 to (tablename).rows.count - 1 
savedid = (tablename).rows(x).item("id").tostring 
next