处理Internet连接打嗝和数据库连接

时间:2010-10-03 13:29:24

标签: c# mysql internet-connection

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

if(hasInternet)
    doDatabaseCall();

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

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

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

  

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

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

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

我正在连接到localhost上的一个端口,如果有所不同,它将通过SSH转发到远程服务器。

1 个答案:

答案 0 :(得分:1)

至于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

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