C# C语言中用布尔字段映射的Tinyint
我试图将“tinyint”映射为“boolean”字段,但它给了我以下问题。这个问题是与本地数据库只与实时数据库,其工作良好。我不明白问题在哪里,可能是地区问题。我使用dapper进行绘图。 请帮助我,如果你有任何想法,下面是复制例外 发生了“System.Data.DataException”类型的第一次意外异常 在DAL.dll中的其他信息:分析列15时出错IsBold=1- 斯拜特C# C语言中用布尔字段映射的Tinyint,c#,mysql,dapper,C#,Mysql,Dapper,我试图将“tinyint”映射为“boolean”字段,但它给了我以下问题。这个问题是与本地数据库只与实时数据库,其工作良好。我不明白问题在哪里,可能是地区问题。我使用dapper进行绘图。 请帮助我,如果你有任何想法,下面是复制例外 发生了“System.Data.DataException”类型的第一次意外异常 在DAL.dll中的其他信息:分析列15时出错IsBold=1- 斯拜特 您可以对数据类型tinyint进行快速扩展,如下所示: public static class IntExt
您可以对数据类型tinyint进行快速扩展,如下所示:
public static class IntExtensions
{
public static bool AsBool(this int value)
{
return value != 0;
}
}
然后,您可以在代码中的任何位置使用它,例如:
IsBold == 1.AsBool()
嗯,听起来像个虫子。我们处理许多类似的转换
使用OpCodes.Conv_Ovf_I4的原始IL在本地测试中工作良好;我在这里有点受阻,因为我在本地没有mysql,而且我所有的服务器都有:只有未签名的tinyint。这里有什么内在的例外,或者其他我可以处理的东西吗?但是:这可能是一个问题。我已经安装了MySql community edition@@version reports 5.7.11-log。以下操作在1.50-beta9上可以正常工作
[FactMySql]
public void SO36303462_Tinyint_Bools()
{
using (var conn = GetMySqlConnection(true, true, true))
{
try { conn.Execute("drop table SO36303462_Test"); } catch { }
conn.Execute("create table SO36303462_Test (Id int not null, IsBold tinyint not null);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (1,1);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (2,0);");
conn.Execute("insert SO36303462_Test (Id, IsBold) values (3,1);");
var rows = conn.Query<SO36303462>("select * from SO36303462_Test").ToDictionary(x => x.Id);
rows.Count.IsEqualTo(3);
rows[1].IsBold.IsTrue();
rows[2].IsBold.IsFalse();
rows[3].IsBold.IsTrue();
}
}
class SO36303462
{
public int Id { get; set; }
public bool IsBold { get; set; }
}
请试试1.50-beta9。如果这还不能解决问题,请帮我重现一个失败的测试。你能提供一些代码吗?我不知道dapper的情况,但你可能想在这里检查最后一个答案重新处理Boolean:Boolean映射到C中的位类型,Tiny Int映射到Byte,为什么不使用正确的映射,它将像微风一样工作,没有灰色区域。。。查看代码,在本例中应该使用OpCodes.Conv_Ovf_I4转换。让我检查一下这是否有效……我还尝试了使用Bit进行布尔映射,但它不起作用@MRINALKAMBOJAPPRIATE快速响应,但当dapper试图用类属性映射表字段时出现了问题。我甚至尝试使用IsBold tinyint signed not null-它仍然有效。您是对的,Marc Gravel,我还更改了数据类型,工作正常。@gurpretingh so。。。还有问题吗?还是它自己修好了?还是1.50-beta9修正了它?什么都没留下。问题已修复。当使用select*和select Id时,我看到了不同的行为,IsBold-像在复杂联接中那样枚举列似乎会导致SByte异常。我在下面的语句中使用了opcode.Conv_Ovf_I4,但不起作用,引发异常公共语言运行库检测到无效程序il.BeginCatchBlocktypeofException;il.EmitOpCodes.Ldloc_0;il.EmitOpCodes.Ldarg_0;il.EmitCallOpCodes.Call,typeofSqlMapper.GetMethodThrowDataException,null;il.EmitOpCodes.Ldnull;il.EmitOpCodes.Stloc_1;il.EmitOpCodes.Conv_Ovf_I4;il.EndExceptionBlock;