我正在尝试使用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#代码中指定哪种类型才能避免此错误?
显然我无法更改数据库中的列类型。
答案 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。