c# - 在 MySql bool 和 C# bool 之间转换的正确方法是什么?

标签 c# mysql

我正在努力理解在 MySql bool 和 C# bool 之间转换的正确方法

它对使用 MySql.Data v8.0 的代码没有帮助。21 不再适用于 v8.0。22.

在下面的代码中,为什么我(现在)需要将 MySqlDbType 指定为 ByteBit 确实是 bool 值的更好表示吗?

为什么cmd.Parameters["success"].Value的类型是ulongsbyte?不应该是bool吗?

[TestFixture]
public class MySqlTests
{
    private const string connString = "server=localhost;database=mysql;user=root;password=";

    [SetUp]
    public void SetUp()
    {
        using var cnn = new MySqlConnection(connString);
        cnn.Open();
        var cmd = cnn.CreateCommand();
        cmd.CommandText = @"
            DROP PROCEDURE IF EXISTS Test;
            CREATE PROCEDURE Test (OUT success BOOL)
            BEGIN
                SET success = true;
            END
        ";
        cmd.ExecuteNonQuery();
    }

    [TestCase(MySqlDbType.Bit, typeof(ulong))] // succeeds with MySql.Data v8.0.21, fails with v8.0.22
    [TestCase(MySqlDbType.Byte, typeof(sbyte))]
    public void Test(MySqlDbType mySqlDbType, Type expectedType)
    {
        using var cnn = new MySqlConnection(connString);
        cnn.Open();
        var cmd = cnn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Test";
        cmd.Parameters.Add(new MySqlParameter("success", mySqlDbType) {Direction = ParameterDirection.Output});
        cmd.ExecuteNonQuery();
        var success = cmd.Parameters["success"].Value;
        Assert.AreEqual(expectedType, success.GetType(), "Unexpected Type");
    }
}

如果重要的话,我正在运行 MySql:5.7

最佳答案

Mysql没有真正的 bool 数据类型,bool只是一个alias of tinyint 。 Tinyint 是 stored on 1 byte ,因此它映射到 C# 的 sbyte 数据类型。

为什么不同版本的mysql数据对这个映射的处理方式不同,我也说不出来,你需要问开发者。

关于c# - 在 MySql bool 和 C# bool 之间转换的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64491910/

相关文章:

c# - 在触发器中进行否定的最简单方法是什么?

c# - ASP.NET AJAX 工具包组合框 : avoid the need to click ENTER twice to postback

sql - mysql自己连接表

php - 我需要什么查询来确定一个用户是否喜欢另一个用户?

mysql - 如何在报表查询向导中将参数与其他值连接起来

c# - OData 无法序列化空资源

c# - .Net Microframework 中的自定义事件

PHP/MYSQL数据库逻辑查询

c# - CSV 导出 Response.End 抛出异常

mysql - grant all 命令有什么问题?