【问题标题】:Dapper issue with tiny int小巧的 int 问题
【发布时间】:2017-06-01 16:56:12
【问题描述】:

我正在尝试使用 Dapper 将数据库从 MySQL 迁移到 SQLServer。

除了 TinyInt 字段外,几乎一切正常。

无论我在 C# 代码中指定什么类型,Dapper 都会系统地抛出异常:

{"解析第 18 列时出错 (COLUMN_WITH_PROBLEM=0 - SByte)"}。

这似乎与MySQL数据库中的一条记录的值为null有关

我试过了:

  • int, int?
  • byte, byte?
  • Byte, Byte?
  • sbyte, sbyte?
  • SByte, SByte?
  • short, short?
  • 甚至boolean?

但我总是遇到同样的问题。

我必须在我的 C# 代码中指定什么类型才能避免此错误?

显然我无法更改数据库中的列类型。

【问题讨论】:

  • 你试过哪些?
  • @juharr 这是我的问题:int,int?,byte,byte?,Byte Byte?,sbyte,sbyte?,SByte,SByte?甚至是布尔值?
  • Tinyint 列是有符号还是无符号?
  • sql server 中的 Tinyint 应该映射到 .Net 中的 Byte... 我知道您已经尝试过但没有运气。你也可以发布一些相关的代码吗?
  • mySQL tinyint 中的@Bridge 已签名,但在我的情况下,我拥有的唯一值是 0 和 null

标签: c# mysql sql-server dapper tinyint


【解决方案1】:

可空字节?应该管用。

public class Foo
{
    public byte? Bar { get; set; }
}

    [Test]
    public void TestTinyint()
    {
        var result = _sqlConnection.Query<Foo>(@"select 0 as 'Bar' 
                                                union all select null as 'Bar'");
        Assert.That(result.First().Bar, Is.EqualTo(0));
        Assert.That(result.Last().Bar, Is.Null);
    }

可能与here讨论的 MySQL 连接器问题有关。

【讨论】:

  • 您的代码有效,我不明白为什么我的代码不行。有很多列,但可能不会影响 Dapper。我更迷茫了
  • 可能是因为在您的情况下 0 和 null 未格式化为 tinyint
  • 我更新了一个可能的 MySQL 连接器问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多