Параметр commandtext меняет тип при выполнении - PullRequest
0 голосов
/ 02 октября 2018

У меня проблема в приложении c # при выполнении командного текста на ms-sql-сервере.Вот функция, которую я использую:

public T ExecuteScalar<T>(string commandText, IDbDataParameter[] parameters)
{
    T result_value = default(T);

    using (var connection = this.CreateConnection())
    {
        connection.Open();
        using (var transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
        {
            using (var command = connection.CreateCommand())
            {
                command.Transaction = transaction;

                command.CommandText = commandText;

                command.CommandTimeout = this.CommandTimeOut;

                if (parameters != null)
                {
                    foreach (var parameter in parameters)
                    {
                        command.Parameters.Add(parameter);
                    }
                }

                object result = command.ExecuteScalar(); //Error is thrown here!

                if (result is DBNull || result == null)
                {
                    result_value = default(T);
                }
                else
                {
                    Type type = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);

                    if (type.IsEnum)
                    {
                        if (Enum.IsDefined(type, Int32.Parse(result.ToString())))
                        {
                            result_value =(T)Enum.Parse(type, result.ToString());
                        }
                    }
                    else
                    {
                        result_value = (T)Convert.ChangeType(result, type);
                    }
                }
            }
            transaction.Commit();
        }
    }

    return result_value;
}

Текст команды выглядит следующим образом:

"insert into tbl_Person (Vorname,Nachname,Strasse,HausNr,PLZ,Ort) output inserted.id values (@Vorname,@Nachname,@Strasse,@HausNr,@PLZ,@Ort)"

Проверка свойств-параметров моего состояния объекта commandtext-object,что HausNr -параметр имеет следующие значения:

  • db-type : строка
  • sql-db-type: NVarChar
  • sql-значение : {13/5}
  • значение : "13/5"

То есть параметр HausNr должен быть строкой, верно?Но при выполнении команды выдается следующая ошибка:

"Fehler beim Konvertieren des nvarchar-Werts \" 15/3 \ "в den int-Datentyp."

Failedпреобразовать значение nvarchar \ "15/3 \" в тип данных int

Похоже, он пытается преобразовать значение параметра HausNr в целое число-значение.Почему это происходит?

1 Ответ

0 голосов
/ 02 октября 2018

В сообщении об ошибке говорится, что драйвер базы данных пытается преобразовать строковое значение в целочисленное значение.Причина в том, что столбец HausNr является целым числом в вашей базе данных.

Поэтому дважды проверьте схему базы данных и измените HausNr на NVarChar.

...