Хранимая процедура не возвращает результат из кода C #, но возвращает значение при выполнении в виде запроса - PullRequest
0 голосов
/ 09 июля 2019

Я написал хранимую процедуру для получения идентификатора клиента с заданными данными.При выполнении вручную он возвращает значение, но не возвращает никакого значения из кода C #.

    create  procedure getCustomerID 
    @firstname CHAR(25),
    @lastname CHAR(25),
    @middlename as CHAR(25)=null,
    @DOB datetime,
    @CustomerState as CHAR(25)=null,
    @CustomerNumber INTEGER,
    @ID nvarchar(25) output
    as

    begin
    ....
    ...
    set @ID='something'
    end



    USE [TestDB]
    GO
    declare @ID nvarchar(25) 
    EXECute [dbo].[getCustomerID] 
    'A', 'B','C','1963-09-06','', 12345, @ID out
     print 'ID:'+@ID
    GO

ВЫХОД

ID: CN0075


C #код:

        try
        {
            using (SqlConnection conn = new SqlConnection("Connectionstring"))
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                using (var command = new SqlCommand("getCustomerID", conn)
                {
                    CommandType = CommandType.StoredProcedure
                })
            {
                command.Parameters.Add("@firstname", SqlDbType.Char, 25).Value = "A";
                command.Parameters.Add("@lastname", SqlDbType.Char, 25).Value = "B";
                command.Parameters.Add("@middlename", SqlDbType.Char, 25).Value = "C";
                command.Parameters.Add("@CustomerState", SqlDbType.Char, 25).Value = "";
                command.Parameters.Add("@DOB", SqlDbType.DateTime).Value = "1963-09-06";
                command.Parameters.Add("@CustomerNumber", SqlDbType.Int).Value = "12345";
                command.Parameters.Add("@ID", SqlDbType.NVarChar, 25).Direction = 
                ParameterDirection.Output;
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        string retunID = command.Parameters["@ID"].Value.ToString();
                    }
                }
            }
        }
    }
        catch (Exception e)
    {
        Logger.Error(e.Message);
    }

Это не исключение.Он выполняет хранимую процедуру и не заходит в цикл While(reader.read()) и не читает данные.

1 Ответ

0 голосов
/ 09 июля 2019

в вашем использовании sp выберите вместо print

create  procedure getCustomerID 
@firstname CHAR(25),
@lastname CHAR(25),
@middlename as CHAR(25)=null,
@DOB datetime,
@CustomerState as CHAR(25)=null,
@CustomerNumber INTEGER,
@ID nvarchar(25) output
as

begin
....
...
set @ID='something'
select @ID
end



USE [TestDB]
GO
declare @ID nvarchar(25) 
EXECute [dbo].[getCustomerID] 
'A', 'B','C','1963-09-06','', 12345, @ID out
 select 'ID:'+@ID
GO

введите описание изображения здесь

...