Я пытаюсь получить выходной параметр из хранимой процедуры.
Это мой код 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
не извлекает никаких параметров в качестве вывода.
Есть идеи, как это решить?