我意识到没有办法以原子方式保证:
if(hasInternet)
doDatabaseCall();然而,--在.NET世界中处理DbConnection和DbCommand对象时,处理连接问题的正确方法是什么?--我特别感兴趣的是MySqlConnection和MySqlCommand对象,但假设(希望)它的异常模式与Server的类相同。
我假设,如果在调用之前互联网崩溃了,conn.Open()就会引发一个MySqlException。我还假设,如果你打电话给ExecuteReader或ExecuteNonQuery,而互联网已经瘫痪,也会发生同样的情况。
我不确定,因为MySql对象的文档没有说明。SqlServer对象只是说它可能引发一个SqlException,这意味着:
对锁定的行执行命令时发生异常。当您使用MicrosoftWebFramework1.0版本时,不会生成此异常。
似乎不包括连接问题..。我想做的是处理异常,等待一定的时间,然后重新开始。我的应用程序的唯一目的是执行这些数据库调用并在一个专门的系统上运行,所以永远重试是我相信的最佳选择。也就是说,I希望区分连接异常和其他类型的数据库异常,这有可能吗?
我已经做了一些测试,它看起来像我假设的那样工作,但是在所有边缘情况下都能工作吗?,例如:命令成功地发送到数据库服务器,但是连接在返回之前还是在返回结果的时候中断?如果它不能在所有的边缘情况下工作,那么我将不得不:执行一个命令,查询所需的状态更改,执行下一个命令,等等。
我正在连接到本地主机上的一个端口,该端口通过SSH转发到远程服务器,如果这有区别的话。
发布于 2010-10-03 13:54:03
至于SqlDataProvider:
SqlException异常有几个属性,为您提供操作失败的详细信息。
对于您的用例,"Class“属性可能是一个很好的选择。它是一个字节,表示异常的严重程度。
请参阅:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.class.aspx
如果这还不够具体,您可以检查错误集合中的单个错误。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.errors.aspx
根据这些信息,您可以决定是否重试。
https://stackoverflow.com/questions/3849942
复制相似问题