为啥在 C# .Net Core 3 中连接到 MySql 时出现错误

Posted

技术标签:

【中文标题】为啥在 C# .Net Core 3 中连接到 MySql 时出现错误【英文标题】:Why am I getting an error when connecting to MySql in C# .Net Core 3为什么在 C# .Net Core 3 中连接到 MySql 时出现错误 【发布时间】:2021-02-04 23:07:49 【问题描述】:

我刚刚从 mysql.Data.MySqlClient .Net Core 类库版本 8.0.21 更新到 8.0.22,它似乎导致我的一些 SQL 查询出错。我没有收到以下错误:

“需要非负数。(参数'count')”

当我尝试运行以下代码时:

DataTable dt = new DataTable();
try 
    using (MySqlConnection con = new MySqlConnection(ConnectionString)) 
        using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM shortcuts WHERE user = @id", con)) 
            da.SelectCommand.Parameters.AddWithValue("@id", userId);
            da.Fill(dt);
        
    
 catch (Exception ex) 
    Console.WriteLine(ex.Message);
    dt = null;

我看不到错误在抱怨什么,我试图从中检索数据的“快捷方式”表中只有 8 条记录。由于我没有更改任何代码并且在我更新 NuGet 包之前它正在工作,我假设这是最新版本的问题。但是,我确实尝试降级回我使用的版本,但没有成功。

我不知道这是否是报告错误或获取信息的正确位置,但我将不胜感激。 以下是我尝试过的一些事情:

降级到版本 8.0.21 重启 MySql 服务(我目前正在使用 XAMPP 和我的本地机器) 添加“da.SelectCommand.Parameters.Clear();”在代码的顶部,以确保没有参数从以前的查询中卡住,因为它适用于其他查询,但不适用于这个。

感谢您提供的任何帮助

【问题讨论】:

你试过Neor Profiler SQL [asp.net][asp.net-core] 是互斥标签:[asp.net] 处理 ASP.NET(框架),[asp.net-core] 处理 ASP.NET(核心)。无论如何,鉴于显示的代码,它们与您的问题无关,因此我已将其删除。 @Dalorzo 我很确定它与新版本完全相关:bugs.mysql.com/bug.php?id=101252 什么是完整的异常调用堆栈? idownvotedbecau.se/noexceptiondetails 【参考方案1】:

您是否正在查询具有包含NULLs 的CHAR(36) 列(即GUID)的表?如果是这样,您会遇到bug 101252,这是在 MySql.Data 8.0.22 中引入的回归(可能要到 8.0.24 才能修复,可能在 2021 年 4 月下旬)。

您可以回滚到 8.0.21,但我个人建议切换到 MySqlConnector(免责声明:我是主要贡献者),因为它与 MySql.Data 中的 .NET Core 和 fixes many bugs 具有更好的兼容性.

【讨论】:

我做了一些测试,发现它是一个名为“文件夹”的列,它确实是 CHAR(36) 并且包含空值

以上是关于为啥在 C# .Net Core 3 中连接到 MySql 时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中连接到 SQL Server 时出现问题

为啥在 SSIS 包中连接到 DB2 时出现错误 58031?

尝试在 C# 中连接到 Oracle DB 时出现问题

尝试在 C# 中连接到 Excel 电子表格

在 C# 中连接到 Oracle 数据库

无法在 Visual Studio 2019 C# 中连接到 Oracle 数据库