从连接读取数据时出错

时间:2018-06-07 05:40:42

标签: c# firebird

我们编写了几个与我们的内部Firebird 2.5.5数据库连接的C#Web服务。

不幸的是,异常“从连接读取数据时出错”的情况越来越频繁,我们不知道如何修复它。

我们尝试禁用池,但这没有达到预期的效果。

我们还编写了一个try catch块来重新连接并重新执行SQL,但我们认为这似乎不是正确的解决方案。

还有其他选择吗?

以下是一些环境信息:

  • C#7.0
  • .NET 4.5
  • Firebird版本2.5.5
  • Firebird Driver 5.5.0
  • Firebird日志当时未显示任何错误消息
  • 任何sql语句
  • 都会不时发生错误

1 个答案:

答案 0 :(得分:0)

问题相对简单:由于某种原因,客户端和服务器之间的网络连接中断或中断,但客户端连接的State仍为Open - 即使您不能再使用该连接。不幸的是,Firebird决定不自动将此状态更新为Broken,如果你问我,这会更有意义。

您已经发现重新打开连接会“稍微解决”问题,我们已经讨论过只有在FbException.ErrorCode为335544726时才能执行此操作。

不幸的是,这确实意味着任何打开的事务也会丢失,并且您无法再提交任何数据。我能想到从这种情况中可靠恢复的唯一方法是重新抛出异常:

try
{
    // ...
}
catch (FbException ex)
{
    if (ex.ErrorCode == 335544726)
    {
        // close the connection (reopen depending on your application)
    }

    throw;
}

通过这种方式,您可以在应用程序的更高级别捕获此异常,然后处理它也适用于此 - 即。重试整个交易,或让用户选择做什么。