我有一个通过 ODBC 驱动程序连接到 MySQL 5 服务器的应用程序。有时我使用准备好的/参数化的批处理语句来轻松地在服务器上移动数据。这工作得很好,直到出现问题的那一刻......
INSERT INTO blabla SELECT blablabla;
INSERT INTO blabla SELECT bliblibli;
UPDATE blabla;
// etc.
现在,如果这个语句出错,我会得到一个非常无用的异常:
System.Data.Odbc.OdbcException
ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-5.0.26-pro-nt]unhandled error from mysql_next_result()
at System.Data.Odbc.OdbcDataReader.NextResult(Boolean disposing, Boolean allresults)
at System.Data.Odbc.OdbcDataReader.NextResult()
at System.Data.Odbc.OdbcDataReader.FirstResult()
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
at MyApp.MyClass.MyData.WhyAreYouReadingThis()
InnerExceptions 为 null。
我能够提取有关该问题的更多信息吗? F.e.如果我没有使用批处理语句,我会收到确切的错误消息,但如果我有批处理语句,则不会。
最佳答案
不确定这是否能真正解决您的问题(更多详细信息请参阅数据库异常),但您是否考虑过使用 MySQL 的 .Net 连接器(又名 MySQL 的 ADO.NET 驱动程序)而不是 ODBC 驱动程序?
您可以从此处下载连接器:http://www.mysql.com/products/connector/
更新:
刚刚在 MSDN 中查看了 OdbcException 类。它似乎有一个名为 Errors 的属性,其中包含 OdbcError 类的集合。这些类的任何实例都应该包含所遇到的每个错误的描述。如果这有帮助,请告诉我。
更新2:
似乎大约一年前,一个与您面临的问题相关的错误已提交给 MySql 团队:http://bugs.mysql.com/bug.php?id=49466
该错误似乎尚未修复,因此您在 .Net 应用程序中对此无能为力。
在错误描述中,据说这是 ODBC 连接器特定的问题。我不能 100% 确定情况确实如此。如果您切换到 .Net 连接器,也请发布消息并告诉我们这是否解决了问题。
关于c# - 从批处理语句中获取异常详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192966/