如果我有一个包含 TINYINT(1)
列的表,并使用 DataReader 选择此列,MySQL 会创建一个 bool 列。
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) 值?总的来说,我让 Entity Framework 生成我的模型,并且我有一些 View 包含创建为 System.Int64 的 bool 列,我想这会解决问题。
最佳答案
您是否尝试过使用 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
关于c# - 强制 MySQL Connector.NET 返回一个 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033032/