Как я могу получить SCOPE_IDENTITY() от SP?

Я пытаюсь получить SCOPE_IDENTITY для моего приложения vb.NET из хранимой процедуры, но я получаю исключение DBNull.

Это мой СП:

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

Оператор вставки работает нормально.

Проблема в том, что я получаю «Преобразование из типа« DBNull »в тип« Целое »недопустимо».

Я использую связанный сервер, может ли это быть проблемой?


person Emmanuel Santana    schedule 07.06.2013    source источник
comment
Я заметил, что вы обновили свой код процедуры с правильным синтаксисом для IDENTITY_SCOPE() после того, как я опубликовал свой ответ. Теперь я вижу еще одну синтаксическую ошибку: ваш параметр .net для @ID — SqlDbType.VarChar, где proc — INT. Если вам все еще нужна помощь, запустите процесс из TSQL и убедитесь, что OrderID выходит из процесса только с использованием TSQL, что изолирует это либо от проблемы SQL, либо от проблемы .Net.   -  person sisdog    schedule 10.06.2013


Ответы (1)


Попробуйте использовать SCOPE_IDENTITY() вместо SCOPE_IDENTITY.

person sisdog    schedule 08.06.2013