Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中用布尔字段映射的Tinyint_C#_Mysql_Dapper - Fatal编程技术网

C# C语言中用布尔字段映射的Tinyint

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”映射为“boolean”字段,但它给了我以下问题。这个问题是与本地数据库只与实时数据库,其工作良好。我不明白问题在哪里,可能是地区问题。我使用dapper进行绘图。 请帮助我,如果你有任何想法,下面是复制例外

发生了“System.Data.DataException”类型的第一次意外异常 在DAL.dll中的其他信息:分析列15时出错IsBold=1- 斯拜特


您可以对数据类型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;