C# 如何使用AddOutParameter从存储过程中获取输出参数
我试图从存储过程中获取输出参数 这是我的C#代码: 这是存储过程:C# 如何使用AddOutParameter从存储过程中获取输出参数,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,我试图从存储过程中获取输出参数 这是我的C#代码: 这是存储过程: 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 CREAT
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
它总是false,但在db中设置为true
该命令得到正确执行,因为它向表中添加了一条新记录
AddOutParameter
不会检索任何参数作为输出
你知道如何解决这个问题吗?你在使用哪个库?它看起来像是ADO.NET.Microsoft.Practices.EnterPriseLibrary.Data.Sql.SqlDatabaseOh(企业不良做法库)上的自制面纱。它来自于汇编:#区域汇编Microsoft.Practices.EnterPriseLibrary.Data,版本=6.0.0.0,区域性=中性,PublicKeyToken=31BF3856AD364E35在您强制转换输出参数的值时,您已经有了
0
。这不是问题所在。问题出在存储过程中。使用相同的参数在SSMS中运行它。
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