Ошибка целочисленного параметра в ADO.NET при вызове через процедуру - PullRequest
0 голосов
/ 06 сентября 2018

У меня возникает одна проблема, когда я пытаюсь получить выходное значение из хранимой процедуры 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 голосов
/ 06 сентября 2018

@output должно быть ParameterDirection.InputOutput, если вы хотите использовать начальное значение, установленное в клиенте.

В настоящее время, поскольку это ParameterDirection.Output, значение игнорируется, по умолчанию оно равно NULL в процедуре, а NULL + anything приводит к NULL.

...