0

我有一条异常消息:

形式参数“@LoginHash”未声明为 OUTPUT 参数,而是在请求的输出中传递的实际参数。

我的数据库代码:

      create table Account
       (
        Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,          
        Identifier INT NOT NULL,
         Passphrase INT NOT NULL
        );

        GO
          CREATE PROCEDURE Authenticate (@LoginHash INT, @PasswordHash INT, @Result BIT OUTPUT)
        AS 
      BEGIN TRANSACTION
    if ((select count(Identifier) from Account where (Identifier=@LoginHash and Passphrase=@PasswordHash))>0)
        set @Result=1
    else
        set @Result=0;

       COMMIT
        GO

我的 ado.net 应用程序代码:

        SqlCommand cmd = new SqlCommand("Authenticate", SqlCon);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter par = cmd.Parameters.Add("LoginHash", SqlDbType.Int);
        par.Direction = ParameterDirection.Input;
        SqlParameter par1 = cmd.Parameters.Add("PasswordHash", SqlDbType.Int);
        par.Direction = ParameterDirection.Input;
        SqlParameter par2 = cmd.Parameters.Add("Result", SqlDbType.Bit);
        par.Direction = ParameterDirection.Output;            
        var result = (bool)cmd.ExecuteScalar();//exception there

如何解决?我更改了以下代码:

      SqlCommand cmd = new SqlCommand(Text, SqlCon);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter par = cmd.Parameters.AddWithValue("@LoginHash", (SqlInt32)loginHash);            
        SqlParameter par1 = cmd.Parameters.AddWithValue("@PasswordHash", (SqlInt32)passwordHash);            
        SqlParameter par2 = cmd.Parameters.Add("@Result",SqlDbType.Bit);
        par2.Direction = ParameterDirection.Output;

现在我有一个错误 NullReferenceException() 发生在同一行。

4

1 回答 1

2

您将不正确的参数标记为输出。最后更改

par.Direction = ParameterDirection.Output;  

par2.Direction = ParameterDirection.Output;  

而且您不必将其他人标记为输入,这是默认设置。

另外,我看不到您实际上在哪里传递这些参数的实际值,也许它在其他地方,但以防万一,这是您的代码的缩短版本,其中还包括传递示例值:

SqlCommand cmd = new SqlCommand("Authenticate", SqlCon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("LoginHash", 123); // example value for LoginHash
cmd.Parameters.AddWithValue("PasswordHash", 456); // example value for PasswordHash
cmd.Parameters.Add("Result", SqlDbType.Bit).Direction = ParameterDirection.Output;
var result = (bool)cmd.ExecuteScalar();
于 2013-08-26T16:34:52.257 回答