C#企业图书馆获取输出参数时遇到问题

C#企业图书馆获取输出参数时遇到问题,c#,sql,asp.net,.net,enterprise-library,C#,Sql,Asp.net,.net,Enterprise Library,我正在编写一个存储过程,用于捕获用户在Web应用程序中所做的某些注释。过程存储注释,我需要输出参数来通知用户是否正确捕获了他/她的注释。但是,我的输出参数有问题 以下是我的存储过程: CREATE PROCEDURE captureNotes ( @IdFile bigint, @IdSection int, @Notes varchar(500), @IsOk bit, @User varchar(100), @Bit bit OUTPUT) AS BEGIN SET NOCOUNT ON

我正在编写一个存储过程,用于捕获用户在Web应用程序中所做的某些注释。过程存储注释,我需要输出参数来通知用户是否正确捕获了他/她的注释。但是,我的输出参数有问题

以下是我的存储过程:

CREATE PROCEDURE captureNotes (
@IdFile bigint,
@IdSection int,
@Notes varchar(500),
@IsOk bit,
@User varchar(100),
@Bit bit OUTPUT)
AS
BEGIN
SET NOCOUNT ON
  BEGIN TRY
  --Checking if we are going to overwrite previous notes--
    DECLARE @Count int;
    SET @Count = (SELECT
      COUNT(IdFile)
    FROM WebValidation
    WHERE IdFile = @IdFile
    AND IdSection = @IdSection
    AND User = @User);
    IF @Count > 0
    BEGIN
      UPDATE WebValidation
      SET Notes = @Notes,
          IsOk = @IsOk, Date = GETDATE()
      WHERE IdFile = @IdFile
      AND IdSection = @IdSection
      AND User = @User
      SET @Bit=1;
    END
    ELSE
    BEGIN
      INSERT INTO WebValidation
        VALUES (@IdFile, @IdSection, @Notes, @IsOk, @User, GETDATE());
        SET @Bit=1;
    END
    SET @Bit = 1;
    SET NOCOUNT OFF
  END TRY
  BEGIN CATCH
    SET @Bit = 0;
    SET NOCOUNT OFF;
  END CATCH
END
我的C代码

尽管注释已成功添加,但代码将始终返回0。我做错了什么?
谢谢您的时间。

AddOutParameter不接受值作为其最后一个参数,但它需要一个大小(对于布尔值,我假设它只有一个字节)。此外,输出参数仅在使用完命令后才包含有效值。因此,鉴于AddOutParameter是空的,您需要一种方法来获取该参数,并在执行查询后查看其值

我无法测试它,但遵循这条路径似乎是合乎逻辑的

db.AddOutParameter(cmd, "@Bit", DbType.Boolean, 1);
db.ExecuteNonQuery(cmd);

// Get the parameter back after the completition of the command.
DbParameter par = cmd.Parameters.GetParameter("@Bit");

// The value property is of type object and can be null, but given the SP
// above it should never be null, so we can have
return Convert.ToInt32(par.Value);

谢谢@Steve,你指的是正确的方向。然而,现在我想我发现了另一个问题。我的SP似乎没有返回任何内容,但我找不到错误。如果我从SQL Server执行它,并尝试打印输出参数,它不会打印任何内容。从查询中,可能是插入失败。例如,如果插入值中缺少某个字段,则应获得异常。而且,这个catch块对理解这个问题没有任何帮助。我建议打印异常,然后尝试从SSMS运行它。
db.AddOutParameter(cmd, "@Bit", DbType.Boolean, 1);
db.ExecuteNonQuery(cmd);

// Get the parameter back after the completition of the command.
DbParameter par = cmd.Parameters.GetParameter("@Bit");

// The value property is of type object and can be null, but given the SP
// above it should never be null, so we can have
return Convert.ToInt32(par.Value);