我有一个具有以下定义的 SQLite 表:
create table routes(id INTEGER PRIMARY KEY AUTOINCREMENT, name string)
并希望使用System.Data.SQLite获取记录:
cmdRoute.CommandText = "SELECT id, name FROM routes";
using (var rdrRoute = cmdRoute.ExecuteReader())
{
if(rdrRoute.Read())
{
var route = new Route();
route.Id = rdrRoute.GetInt32(0);
route.Name = rdrRoute.GetString(1); // Throws InvalidCastException
}
}
当数据库中的值为数字时,GetString 会引发 InvalidCastException。当我把它放在rdrRoute.GetValue(1)
手表里时,它显示类型是“object {string}”。当我将值更改为非数字值时,它工作正常。
我查看了SQLite DataReader 代码,看起来 SQLite 检查值以将其映射到一组允许的类型。
这是预期的行为吗?我该如何防止这种情况,以某种方式包含数字的字符串仍然是字符串?