通过过程调用时在ADO.NET中整数输出参数为空的问题

时间:2018-09-06 15:51:02

标签: c# sql-server ado.net int out

当我尝试从SQL Server存储过程获取INT类型的输出值时,我遇到一个问题,然后我得到NULL值

这是存储过程:

CREATE PROCEDURE dbo.NULLISSUE 
    @input VARCHAR(10),
    @output INT = 0 OUTPUT
AS
BEGIN
    IF @input >= '1'
    BEGIN
        SET @output = @output + 1

        RETURN(0)
    END
END

这是.NET代码:

using (var connection = new SqlConnection(connectionString))
{
    using (var command = new SqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "dbo.NULLISSUE";

        command.Parameters.Clear();
        command.Parameters.AddWithValue("@input", "1");

        command.Parameters.AddWithValue("@output", SqlDbType.Int);
        command.Parameters["@output"].Value = 0;
        command.Parameters["@output"].Direction = ParameterDirection.Output;

        command.CommandTimeout = 3000;

        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();

        Console.WriteLine(command.Parameters["@output"].Value);
        //null value ?
        Console.ReadLine();
    }
}

我通过在过程中进行ISNULL(@output, 0)来解决问题,但是不确定为什么可以在.NET方面完成,以及为什么ADO.NET无法通过/设置/初始化OUTPUT参数= 0。

谢谢。

1 个答案:

答案 0 :(得分:4)

如果您希望

@output使用客户端中设置的初始值,则必须为ParameterDirection.InputOutput

当前,由于其值为ParameterDirection.Output,因此该值被忽略,该值在过程中默认为NULL,而NULL + anything的结果为NULL