升级到 MySQL ODBC 连接器 8.1 后,简单存储过程命令失败

问题描述 投票:0回答:1

我编写了一个简单的测试应用程序,它使用参数调用 MySql 存储过程并使用结果填充 DataTable。

当我安装了 MySQL ODBC 8.0 UNICODE 驱动程序并在查询字符串中指定时,它可以正常工作。当我将驱动程序更新到 8.1 并将连接字符串更改为使用 8.1 时,该命令失败并出现以下错误:

ERROR [42000] [MySQL][ODBC 8.1(w) Driver][mysqld-8.0.34-commercial]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{ call GetDashboardData(?, ?) }' at line 1'

这是应用程序的代码,升级连接器驱动程序后我唯一更改的是连接字符串中的 8.0 更改为 8.1(这成功连接到数据库)

    static void Main(string[] args)
    {
        var connection = new OdbcConnection("Driver={MySQL ODBC 8.1 UNICODE Driver}; Server=localhost; Database=theDatabase; Uid=theUser; Pwd=thePassword; ");
        
        connection.Open();
        OdbcCommand command = new OdbcCommand("{ call GetDashboardData(?, ?) }", connection);
        command.CommandType = CommandType.StoredProcedure;
        var param1 = command.CreateParameter();
        param1.ParameterName = "timePeriodHours";
        param1.Direction = ParameterDirection.Input;
        param1.Value = 24;
        param1.DbType = DbType.Int32;
        command.Parameters.Add(param1);

        var param2 = command.CreateParameter();
        param2.ParameterName = "IdList";
        param2.Direction = ParameterDirection.Input;
        param2.Value = "000";
        param2.DbType = DbType.String;
        command.Parameters.Add(param2);

        DataTable table = new DataTable();
        OdbcDataAdapter adapter = new OdbcDataAdapter(command);
        adapter.Fill(table);
        Console.WriteLine(table.Rows.Count);
    }

我没有看到任何提及这些版本之间可能发生的任何变化,从而可能影响这一点。任何帮助将不胜感激

编辑

如果我创建一个不带参数的存储过程并将命令文本设置为:

{ call GetDashboardData() }

它有效。仅当尝试使用参数时才会出现此问题

c# mysql ado.net odbc
1个回答
0
投票

事实证明这是 8.1 MySql 连接器的一个错误: https://bugs.mysql.com/bug.php?id=112285

© www.soinside.com 2019 - 2024. All rights reserved.