Формат исключения для LINQ to sql.Строка должна быть ровно одного символа - PullRequest
2 голосов
/ 20 июня 2011

Этот код выдает ошибку «Форматирование исключения. Строка должна быть ровно в один символ». Я не могу понять почему. Есть идеи?

var contract = (from c in db.SM_CONTRACTs
                where c.CON_TUK2 != null
                   && c.CON_TUK2 == req.Imei
                select c).FirstOrDefault();

req.Imei выглядит как "8944200005977030038"

Контекст данных выглядит так:

[Column(Storage="_CON_TUK2", DbType="VarChar(20)")]
public string CON_TUK2
{
    get
    {
        return this._CON_TUK2;
    }
    set
    {
        if ((this._CON_TUK2 != value))
        {
            this.OnCON_TUK2Changing(value);
            this.SendPropertyChanging();
            this._CON_TUK2 = value;
            this.SendPropertyChanged("CON_TUK2");
            this.OnCON_TUK2Changed();
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Вероятно, происходит то, что таблица SM_CONTRACTs в вашей базе данных имеет один или несколько столбцов varchar (1) (или nvarchar (1)).Генератор кода преобразует это в System.Char в вашей модели.Это вызовет исключение FormatException, если данные не являются точно одним символом.

Попробуйте найти этот столбец в конструкторе моделей и измените свойство «Генерация кода - Тип» на «Строка».

0 голосов
/ 16 декабря 2015

Это не обязательно связано с полем, которое вы используете в вашем конкретном запросе linq (или в вашем where утверждении)!

Это может быть ЛЮБОЙ из полей вашей модели, который является CHAR(1), но имеет "пустую строку" в качестве сохраненных данных. Это действительно для типа sql CHAR, но не для System.Char в C #.

Изменение этого типа поля на string должно быть легко исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...