LINQ to sql的格式异常。字符串长度必须正好一个字符

时间:2011-06-20 13:56:08

标签: c# linq-to-sql

此代码抛出错误“格式异常。字符串必须正好一个字符长”。我不明白为什么。有什么想法吗?

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 个答案:

答案 0 :(得分:4)

可能发生的事情是数据库中的SM_CONTRACTs表有一个或多个varchar(1)(或nvarchar(1))列。代码生成器会将其转换为模型中的System.Char。只要数据不是一个字符,这将抛出FormatException。

尝试在模型设计器中查找此列,并将Code Generation - Type属性更改为“String”。

答案 1 :(得分:0)

它不一定与您在特定linq查询中(或在where语句中)使用的字段有关!

它可能是您的任何模型字段CHAR(1),但存储的数据为“空字符串”。哪个适用于sql CHAR类型,但不适用于<#1}}中的

将此字段类型更改为System.Char应该很容易解决。