如何检索有关此批量加载错误的更多信息?

How do I retrieve more information about this bulk load error?

我正在尝试使用 MySqlConnector 库中的 MySqlBulkCopy class 将一些数据批量加载到 MySql 服务器。

第一个 table 它工作得很好。对于第二个 table,它出错了,说 10 行中有 0 行被写入。 (使用一个小数据集进行测试;实际使用中涉及的行数要多得多。)

调试库代码,我从操作结果中发现 the warning count 是 30,受影响的行数是 0,但是库没有对这些警告做任何处理。它们从未出现在面向用户的错误消息中,而且回复数据包基本上只是元数据,我怀疑需要一些额外的 API 调用来检索警告。

假设我可以完全访问 MySql 服务器和库的源代码,我需要做什么才能阅读这些警告并弄清楚我的批量加载操作出了什么问题?

(注意:请不要建议通过切换到另一个 MySql ADO.NET 驱动程序来“解决”这个问题。对于我的用例,这只是将一个问题换成另一个问题,可能更糟糕的一个。)

有两种方法:

显示警告

MySqlBulkCopy.WriteToServer 完成后,为 SHOW WARNINGS 命令调用 ExecuteReader。根据 the documentation 这将“[显示] 有关在当前会话中执行最近的非诊断语句所产生的条件的信息”。

InfoMessage 事件处理程序

在执行 MySqlBulkCopy.WriteToServer 之前,将事件处理程序附加到 MySqlConnection.InfoMessage。在 WriteToServer 期间,将使用 MySqlInfoMessageEventArgs 对象调用事件处理程序。这包含一个 Errors 属性,其中包含已发生的错误和警告列表。