Dapper问题与小int

时间:2017-01-17 14:59:17

标签: c# mysql sql-server dapper tinyint

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

除了TinyInt字段外,几乎所有东西都可以。

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

  

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

似乎与MySQL数据库中某个记录的值为空

的事实有关

我试过了:

  • class B { protected: int i; static int j; }; class D1 : public B { }; class D2 : public B { friend void fr(B*,D1*,D2*); void mem(B*,D1*); }; ... void D2::mem(B* pb, D1* p1) { pb->i = 1; // ill-formed p1->i = 2; // ill-formed i = 3; // OK (access through this) B::i = 4; // OK (access through this, qualification ignored) int B::* pmi_B = &B::i; // ill-formed int B::* pmi_B2 = &D2::i; // OK j = 5; // OK (because j refers to static member) B::j = 6; // OK (because B​::​j refers to static member) } ... int
  • int?byte
  • byte?Byte
  • Byte?sbyte
  • sbyte?SByte
  • SByte?short
  • 甚至short?

然而,我总是有同样的问题。

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

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

1 个答案:

答案 0 :(得分:0)

无效字节?应该管用。

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);
    }

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