为啥在 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】:
您是否正在查询具有包含NULL
s 的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 时出现错误的主要内容,如果未能解决你的问题,请参考以下文章