【问题标题】:Handling Internet Connection Hiccups and Database Connections处理 Internet 连接中断和数据库连接
【发布时间】:2010-10-03 21:54:03
【问题描述】:

我意识到没有办法原子保证:

if(hasInternet)
    doDatabaseCall();

但是,在 .NET 世界中处理 DbConnection 和 DbCommand 对象时,处理连接问题的正确方法是什么?我对 MySqlConnection 和 MySqlCommand 对象特别感兴趣,但假设(希望)它的异常模式与 SQL Server 的类相同。

我假设如果 Internet 在调用 conn.Open() 之前出现故障,则会引发 MySqlException。我还假设如果您调用 ExecuteReader 或 ExecuteNonQuery 并且互联网已经中断,也会发生同样的情况。

我不确定,因为 MySql 对象的文档没有说明。 SqlServer 对象只是说它可能会引发 SqlException,这意味着:

对锁定的行执行命令时发生异常。当您使用 Microsoft .NET Framework 1.0 版时,不会生成此异常。

这似乎不包括连接问题...我想做的是处理异常,等待一段时间,然后重新开始。我的应用程序的唯一目的是执行这些数据库调用并在专用系统上运行,因此我认为永远重试确实是最好的选择。也就是说,我很想区分连接异常和其他类型的数据库异常,这可能吗?

我已经进行了一些测试,它似乎可以正常工作,但 它是否适用于所有边缘情况? 例如:命令已成功发送到数据库服务器,但连接断开在返回结果之前或期间?如果它在所有边缘情况下都不起作用,那么我将不得不:执行一个命令,查询所需的状态更改,执行下一个命令等。每个命令都要通过。

我正在连接到 localhost 上的一个端口,该端口通过 SSH 转发到远程服务器,如果这有影响的话。

【问题讨论】:

    标签: c# mysql internet-connection


    【解决方案1】:

    至于 SqlDataProvider:

    SqlException 异常有几个属性可以为您提供操作失败的详细信息。

    对于您的用例,“类”属性可能是一个不错的选择。这是一个指示异常严重程度的字节。

    见:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.class.aspx

    如果这还不够具体,您可以检查 Errors 集合中的各个错误。

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.errors.aspx

    根据这些信息,您可以决定是否重试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多