Как получить выходной параметр из хранимой процедуры, используя AddOutParameter - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь получить выходной параметр из хранимой процедуры.

Это мой код C #:

public bool GetLock() // data db
{
    SqlDatabase objDB = new SqlDatabase("my conn string");

    using (DbCommand objCMD = objDB.GetStoredProcCommand("pacquirelock"))
    {
        objDB.AddInParameter(objCMD, "@processid", DbType.Int32, (int)(LockProcesses.ReleaseWO));
        objDB.AddInParameter(objCMD, "@description", DbType.String, GlobalConfigurationAPI.Description);
        objDB.AddInParameter(objCMD, "@servicecenterid", DbType.Int32, jobModel_lock.branchid);
        objDB.AddInParameter(objCMD, "@loginid", DbType.Int32, GlobalConfigurationAPI.LoginID);
        objDB.AddInParameter(objCMD, "@owner", DbType.String, GlobalConfigurationAPI.Owner);
        objDB.AddOutParameter(objCMD, "@lockacquired", DbType.Boolean, ParameterDirection.Output);

        objDB.ExecuteNonQuery(objCMD);

        bool value = (bool)objDB.GetParameterValue(objCMD, "@lockacquired");
    }

    return false;
}

Это хранимая процедура:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pacquirelock]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[pacquirelock]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[pacquirelock]
    @processid INT,
    @description NVARCHAR(100),
    @servicecenterid INT,
    @loginid INT,
    @owner NVARCHAR(100),
    @lockacquired BIT OUTPUT
AS
BEGIN
    BEGIN TRANSACTION
        IF (SELECT COUNT(0) FROM tlock 
            WHERE islocked = 1 AND processid = @processid 
              AND (servicecenterid = @servicecenterid OR loginid = @loginid)) > 0
        BEGIN
            SET @lockacquired = 0
        END
        ELSE
        BEGIN
            INSERT INTO tlock (processid, description, servicecenterid, loginid, owner, islocked)
            VALUES (@processid, @description, @servicecenterid, @loginid, @owner, 1)

            SET @lockacquired = 1
        END 

        COMMIT TRANSACTION
END
GO

Это всегда ложь, но в БД установлено значение true.

Команда выполняется правильно - знайте, что, поскольку она добавляет новую запись в таблицу.

AddOutParameter не извлекает никаких параметров в качестве вывода.

Есть идеи, как это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...