为了账号安全,请及时绑定邮箱和手机立即绑定

在 Dapper 中调用 QueryAsync 会抛出 System.Data.

在 Dapper 中调用 QueryAsync 会抛出 System.Data.

C#
蝴蝶刀刀 2023-12-17 10:01:25
我正在尝试使用 Dapper 查询 Sqlite 表,如下所示:CREATE TABLE "Running" (    "Id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,    "MachineName"   BLOB NOT NULL DEFAULT 'machine' UNIQUE,    "IsOnline"  INTEGER DEFAULT 0,    "TimesRan"  INTEGER DEFAULT 0,    "LoginDateTime" TEXT,    "LogoutDateTime"    TEXT,    "ForceUpgrade"  INTEGER NOT NULL DEFAULT 0,    "Version"   TEXT)目前在该表中我只有一条记录:1DESKTOP-KQT7CGC 012019-09-21 03:04:10.0990672019-09-21 03:04:37.6825109 04.0.0var data = await _globalConfig.Connection.GetStatusAsync();    public async Task<List<ApplicationInfoModel>> GetStatusAsync()    {        using (IDbConnection cnn = new SQLiteConnection(ConfigurationManager.GetLocalOrSharedConnectionString(), true))        {            var output = await cnn.QueryAsync<ApplicationInfoModel>("select * from Running", new DynamicParameters());            return output.ToList();        }    }ApplicationInfoModel 看起来像这样:public class ApplicationInfoModel{    public int Id { get; set; }    public string MachineName { get; set; }    public bool IsOnline { get; set; }    public int TimesRan { get; set; }    public DateTime LoginDateTime { get; set; } = DateTime.Now;    public DateTime LogoutDateTime { get; set; }    public bool ForceUpgrade { get; set; }    public string Version { get; set; }}我收到了 System.Data.DataException,其中包含消息 Error parsing column 1 (MachineName=System.Byte[] - Object)。有人可以帮助我理解为什么我应该在模型上实现IConvertible吗?我尝试仅针对 属性实现 IConvertible,但它仍然引发相同的异常。MachineName
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

在这种特定情况下对象必须实现 IConvertible 内部异常意味着 Dapper 无法自动转换您的MachineName DB字段从数据库类型 BLOB 到模型类型 string

您应该对 列使用数据库类型 TEXT(这应该是正确的选择),或者将其转换为 SQL 正确地。像这样:MachineNameselectTEXT

select cast(MachineName AS TEXT), IsOnline, TimesRan, LoginDateTime, LogoutDateTime, ForceUpgrade, Version from Running

这两个选项都应该可以解决您当前的问题(例外情况)。

查看完整回答
反对 回复 2023-12-17
  • 1 回答
  • 0 关注
  • 54 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信