Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AddOutParameter从存储过程中获取输出参数_C#_Sql_Sql Server_Stored Procedures - Fatal编程技术网

C# 如何使用AddOutParameter从存储过程中获取输出参数

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

我试图从存储过程中获取输出参数

这是我的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

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