我意识到没有办法原子地保证:
if(hasInternet)
doDatabaseCall();
然而,
在.NET世界中处理dbconnection和dbcommand对象时,处理连接问题的正确方法是什么?
我对mysqlconnection和mysqlcommand对象特别感兴趣,但是假设(希望)它的异常模式与SQL Server的类相同。
我假设,如果在调用conn.open()之前互联网中断,则会引发mysqlException。如果你调用executeReader或executeNonQuery,而互联网已经瘫痪,我也会假设同样的情况发生。
我不确定,因为mysql对象的文档没有说明。sqlserver对象只是说它可能引发一个sqlException,这意味着:
对锁定的行执行命令时发生异常。使用Microsoft.NET Framework 1.0版时不会生成此异常。
这似乎不包括连接问题…我想做的是处理异常,等待一段时间,然后重新开始。我的应用程序的唯一目的是执行这些数据库调用,并在专用系统上运行,因此永久重试确实是我认为最好的选择。这就是说,
我想区分连接异常和其他类型的数据库异常,这有可能吗?
我做了一些测试,它看起来像我想象的那样工作,但是
它在所有边缘情况下都有效吗?
例如:命令已成功发送到数据库服务器,但在返回结果之前或在返回结果时连接断开?如果它在所有边缘情况下都不起作用,那么我必须:执行一个命令,查询所需的状态更改,执行下一个命令,等等。每个命令都必须经过。
我正在连接本地主机上的一个端口,通过ssh将该端口转发到远程服务器,如果这样做有区别的话。