我在读布尔值( enabled
字段),并使用它初始化对象。我使用的是一个数据表:
DataTable dt = new DataTable();
dt.Load(reader);
List<Account> accounts = dt.AsEnumerable().Select(row =>
new Account
{
name = row.Field<string>("user")
enabled = row.Field<Boolean>("enabled")
}).ToList();
田野 enabled
被宣布为 boolean
在mysql数据库中。在数据库中 enabled
字段定义为: enabled boolean default false,
我在试着读这本书时出错了 enabled
变量:
system.data.datasetextensions.dll中发生“system.invalidcastexception”类型的异常,但未在用户代码中处理
我得到的错误是 enabled = row.Field<Boolean>("enabled")
线路。我认为错误是c#的布尔数据类型。当我使用enabled=“1”.equals(row.field(“enabled”)
和enabled=row.field(“enabled”)==1
时,我也遇到了同样的问题。如果我将其替换为'enabled=true',则一切正常。
更新:数据库连接:
string connString = "SERVER=localhost" + ";" +
"DATABASE=accs;" +
"UID=root;" +
"PASSWORD=root;";
MySqlConnection cnMySQL = new MySqlConnection(connString);
update2:更详细的错误消息
用户代码未处理system.invalidcastexception
hresult=-2147467262 message=指定的强制转换无效。
source=system.data.datasetextensions stacktrace:at system.data.datarowextensions.unboxt1.nullablefield[telm](对象值)at system.data.datarowextensions.field[t](数据行,string columnname)位于webapplication5.webservice1。<>webservice1.asmx.cs中的c.b\u1\u0(datarow行):system.linq.enumerable.whereselectenumerableiterator
2.movenext(),位于system.collections.generic.list1..ctor(ienumerable
1 collection),位于system.linq.enumerable.tolist[tsource](ienumerable`1 source)webservice1.asmx.cs中的webapplication5.webservice1.getusersentpackages(字符串用户名):第87行innerexception
2条答案
按热度按时间jbose2ul1#
我通过以下方法解决了这个问题:
如果要检查false,请使用
"false"
而不是"1"
:使用
String
而不是Object
不起作用!jaql4c8m2#
如注解中所述,mysql中的boolean类型是tinyint(1)的同义词。如果无法按建议更改连接字符串,则c#中的等效类型为
byte
. 如果数据库中可能有空值,那么应该使用byte?
(可空字节)。代码是: