C# LINQ到sql的格式异常。字符串长度必须正好为一个字符
此代码引发错误“格式异常。字符串长度必须正好为一个字符”。我不明白为什么。有什么想法吗C# LINQ到sql的格式异常。字符串长度必须正好为一个字符,c#,linq-to-sql,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(); 请求Imei看起来像“89442000059770
var contract = (from c in db.SM_CONTRACTs
where c.CON_TUK2 != null
&& c.CON_TUK2 == req.Imei
select c).FirstOrDefault();
请求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();
}
}
}
可能的情况是,数据库中的SM_CONTRACTs表有一个或多个varchar(1)(或nvarchar(1))列。代码生成器将此转换为模型中的System.Char。只要数据不是一个字符,就会抛出FormatException
请尝试在模型设计器中查找此列,并将“代码生成-类型”属性更改为“字符串”。它不一定与您在特定linq查询(或
where
语句)中使用的字段有关
它可以是属于CHAR(1)
但存储有“空字符串”作为数据的任何模型字段。它对sqlCHAR
类型有效,但对C#中的System.CHAR
无效
将此字段类型更改为
string
应该很容易解决。它真的是数据库中的VarChar(20)吗?嗯。考虑到表字段的大小为1,这不会将req.Imei中的值截断为单个字符吗?@J.Steen问题不在于Imei。当对象实例化时,如果该列在db中为空,则它会尝试将“”放入字符(1)中,因此会被忽略