【问题标题】:catch mysql-exception using .Number使用 .Number 捕获 mysql 异常
【发布时间】:2014-04-28 17:48:36
【问题描述】:

我想捕获编号为 1046 的特定 mysql 错误。 如果我使用 MessageBox.Show 来显示错误号,它始终为 0,无论它是哪个异常。 Exception 不应该有一个像 1046 这样的数字吗?

catch (MySqlException mysqlex)
{ 
    MessageBox.Show(mysqlex.Number.ToString());
}

编辑:对不起,我正在使用 MySQL-Connector / Net。

【问题讨论】:

  • @GrantWinney 不,这是 Mysql.Data 连接器中包含的标准类(请参阅dev.mysql.com/doc/connector-net/en/…
  • 在消息框中写入 mysqlex.Message。它说什么?
  • 实际上 Number 属性是大写的dev.mysql.com/doc/connector-net/en/…。你能粘贴真实的代码吗?这不会编译 IMO。
  • 确实Number 应该以大写字母开头。
  • 如果错误号为0,则客户端无法连接到服务器。你能看看你是否有内部异常吗?

标签: c# mysql database exception visual-studio-2012


【解决方案1】:

您没有看到数字,因为您没有连接到数据库。 并且可能 MySQL 正在为错误异常分配编号。

如果您查看 Number 属性 here 的描述,它会说

获取标识错误类型的数字。此编号对应于服务器错误代码和消息中给出的错误编号。

由于您没有与服务器建立连接,您无法获取服务器错误代码。

检查您的连接字符串。

【讨论】:

    【解决方案2】:

    可能和this一样的问题。

    请尝试以下代码。

    MessageBox.Show(mysqlex.InnnerException.Number.ToString());

    【讨论】:

    • 这应该是对问题的评论;您应该包括解释和对文档的引用以产生高质量的答案,而不仅仅是指向您自己的答案的链接(例如,解释为什么需要查询 InnerException 属性才能获得数字)。
    • 我真的很抱歉。添加了一个答案。非常感谢您指出我回答的一个问题。
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2013-03-24
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多