Sql server 如何从SP获取范围_IDENTITY()?

Sql server 如何从SP获取范围_IDENTITY()?,sql-server,vb.net,stored-procedures,dbnull,scope-identity,Sql Server,Vb.net,Stored Procedures,Dbnull,Scope Identity,我正在尝试从存储过程获取vb.NET应用程序的作用域标识 但我得到了一个异常 这是我的SP: ALTER PROCEDURE [dbo].[sp_XYZ] @ID INT, @OtherID INT OUTPUT AS BEGIN SELECT @Name = name, FROM dbo.PERSON WHERE id = @ID INSERT INTO [SERVERSOLMAR\TSW].TSWDATA.dbo.t_Employees ( Name )

我正在尝试从存储过程获取vb.NET应用程序的作用域标识 但我得到了一个异常

这是我的SP:

ALTER PROCEDURE [dbo].[sp_XYZ] 
@ID INT,
@OtherID INT OUTPUT

AS
BEGIN

SELECT 
@Name = name,
FROM dbo.PERSON
WHERE  id = @ID

INSERT INTO [SERVERSOLMAR\TSW].TSWDATA.dbo.t_Employees
    (
    Name
    )
VALUES
    (
    @Name
    )
    SET @OtherID = SCOPE_IDENTITY() 
END

我的vb.NET代码:

Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("CON").ConnectionString)
    Dim dataAdapter As New SqlDataAdapter("sp_XYZ", con)
    Dim ARLI As Integer
    Try
        con.Open()
        With dataAdapter.SelectCommand
            .CommandType = CommandType.StoredProcedure
            .Parameters.Add("@ID", SqlDbType.VarChar).Value = id

            Dim identity As New SqlParameter("@OtherID", SqlDbType.Int)
            valorInteger.Direction = ParameterDirection.Output
            .Parameters.Add(identity)
            .ExecuteNonQuery()
            ARLI = identity.Value
        End With
End try
insert语句工作正常

问题是im获取“从类型'DBNull'到类型'Integer'的转换无效。”


我正在使用链接服务器,这可能是问题所在吗?

尝试使用SCOPE\u IDENTITY()而不是SCOPE\u IDENTITY。

在我发布答案后,我注意到您使用正确的IDENTITY\u SCOPE()语法更新了您的程序代码。现在我看到另一个语法错误:@ID的.net参数是SqlDbType.VarChar,其中proc是INT。如果您仍在寻求帮助,请从TSQL运行proc,并验证OrderID是否仅使用TSQL从proc中生成,这将隔离为SQL问题或.net问题。