Ошибка преобразования nvarchar в тип данных int

1

Я получаю эту ошибку, когда пытаюсь вызвать код моей хранимой процедуры на моем сайте. Я давно застрял, так как я не знаю, где бы я ни конвертировал или объявлял значение как целое. Это мой оператор SQL:

create procedure GetRepPhoneID
@Rep        nvarchar(100),
@phoneID    nvarchar(100) output
as
set @phoneID = (select concat(CustomerRepPh, '~', cast(RepID as nvarchar(100))) as 'PhoneAndID'
from Reps
where CustomerRep=@Rep)
return @phoneID
go

Затем из моего кода С# я пытаюсь вызвать хранимую процедуру:

public static string GetRepPhone (строка Rep) {строка Connection = WebConfigurationManager.ConnectionStrings ["JDC_DatabaseConnectionString"]. ConnectionString; SqlConnection sqlConnection = новое SqlConnection (соединение);

    //This funciton will take all of the values and create them.
    try
    {
        sqlConnection.Open();
    }
    catch (Exception err)
    {
        Console.WriteLine(err.Message);
    }

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = sqlConnection;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "GetRepPhoneID";           //getting the  procedure created in SQL.

    SqlParameter CustomerParam = new SqlParameter();
    CustomerParam.ParameterName = "Rep";
    CustomerParam.SqlDbType = SqlDbType.NVarChar;
    CustomerParam.Value = Rep;
    CustomerParam.Direction = ParameterDirection.Input;

    //We are using an output parameter not a return one because it is a string.
    SqlParameter ReturnParam = new SqlParameter("phoneID", SqlDbType.NVarChar, 100);
    ReturnParam.Direction = ParameterDirection.Output;

    cmd.Parameters.Add(CustomerParam);
    cmd.Parameters.Add(ReturnParam);

    cmd.ExecuteNonQuery();

    sqlConnection.Close();
    return ReturnParam.Value.ToString();
}

Я делаю то же самое несколько раз в своем коде, но все они возвращают целые числа, поэтому не было ошибок, поэтому я знаю, что это должно работать. Ошибка cmd.ExecuteNonQuery() на cmd.ExecuteNonQuery(). Точная ошибка:

Conversion failed when converting the nvarchar value '(111)222-6666~29' to data type int.

Я понимаю, что я не могу преобразовать эту строку в целое число, но я не вижу нигде в своем коде. Я объявляю целое число, или я пытаюсь преобразовать.

Любая помощь будет оценена. Благодарю.

Теги:
sql-server

1 ответ

3
Лучший ответ

Вы вводите в заблуждение значение RETURN для параметра OUTPUT. RETURN - это необязательный код состояния типа INT. Объявите другой параметр как OUTPUT.

Это означает, что это недопустимо в хранимой процедуре:

return @phoneID

Вместо этого добавьте @phoneID nvarchar(100) OUTPUT в список параметров и удалите DECLARE @PhoneID:

CREATE PROCEDURE GetRepPhoneID
(
  @Rep        NVARCHAR(100),
  @phoneID    NVARCHAR(100) OUTPUT
)
AS
SET NOCOUNT ON;

SELECT @phoneID = concat(CustomerRepPh, '~', RepID)
FROM Reps
WHERE CustomerRep = @Rep;

Вышеупомянутый представляет собой весь процесс. Вам не нужен RETURN или SET.

Затем в коде С# вам нужно изменить способ определения этого параметра:

SqlParameter ReturnParam = new SqlParameter("phoneID", SqlDbType.NVarChar, 100);
ReturnParam.Direction = ParameterDirection.Output;

Затем удалите эту строку, поскольку она не нужна, так как значение параметра останется после закрытия соединения:

string PhoneAndID = cmd.Parameters[1].Value.ToString();

И измените return:

return ReturnParam.Value.ToString();

Наконец, вам, вероятно, необходимо обновить объявление входного параметра следующим образом:

SqlParameter CustomerParam = new SqlParameter("Rep", SqlDbType.NVarChar, 100);
CustomerParam.Value = Rep;
CustomerParam.Direction = ParameterDirection.Input;
  • 0
    Спасибо за помощь. Это избавило от первоначальной ошибки, но теперь выдает String[1]: the Size property has an invalid size of 0.
  • 0
    @ChaseErnst Я только что отредактировал часть C # с объявлением param.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню