强制MySQL Connector.NET返回布尔值

时间:2015-05-04 14:44:12

标签: c# mysql .net mysql-connector

如果我有一个带有TINYINT(1)列的表,并使用DataReader选择此列,则MySQL会创建一个布尔列。

        var query = "SELECT column FROM table";
        using (var reader = ExecuteReader(query))
        {
            var schemaTable = reader.GetSchemaTable();
            var row = schemaTable.DefaultView[0];
            Assert.AreEqual(typeof(bool), row["DataType"]);
        }

但是,如果我的查询不起作用。

        var query = "SELECT false";
        using (var reader = ExecuteReader(query))
        {
            var schemaTable = reader.GetSchemaTable();
            var row = schemaTable.DefaultView[0];
            Assert.AreEqual(typeof(bool), row["DataType"]);
        }

此测试失败,因为DataType是System.Int64

是否可以强制查询返回TINYINT(1)值?在大图中我让实体框架生成我的模型,我有一些布尔列创建为System.Int64的视图,我想这可以解决问题。

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用CONVERT或CAST?

 var query = "SELECT CONVERT(0,TINYINT(1))"
 var query = "SELECT CAST(0 AS TINYINT(1))"

编辑:这似乎是MySQL中CAST / CONVERT函数的限制。建议的解决方案是创建一个执行转换的函数

 CREATE FUNCTION x_cast_to_tinyint(number bigint) RETURNS tinyint
 BEGIN    return number;
 END

然后调用函数

select   x_cast_to_tinyint(d.tiny_int*1) as tiny

参考:http://idiot-howto.blogspot.com/2008/07/mysql-cast-limitation.html#!/2008/07/mysql-cast-limitation.html