1

我有一个使用 FirebirdSQL 连接到 Firebird 2.5 DB 的 WinForms 应用程序。在这个应用程序中,我有一个用于与 DB 交互的 FBConnection 和一个提供用于编辑 DB 的 UI 的控件 - 按钮、文本框等以及各种事件处理程序。当这个控件加载时,我通过调用 FBConnection 实例的 BeginTransaction() 方法来创建一个新事务。因此,当用户与控件(按钮)交互时,我正在调用用于更改 DB 中值的方法(通过调用存储过程或执行 SQL 语句),如下所示:

FbCommand command = new FbCommand(cmd_text, connection);
command.Transaction = transaction;
FbDataReader reader = command.ExecuteReader()

当用户决定应用他对数据库所做的所有更改时,他单击我的控件上的“应用”按钮,该按钮调用 transaction.Commit() 或调用 transaction.Rollback() 的“取消”按钮。

这工作得很好,但突然间我遇到了一个关于在我的应用程序中使用多个事务的问题。在一个应用程序中同时使用多个编辑控件的情况下,您似乎无法在一个连接中创建和使用多个事务。

我的问题是 - 我不知道如何使用一个连接创建多个并行事务。我开始相信 FirebirdSQL 是不可能的。似乎唯一的解决方案是为每个活动事务创建与数据库的新连接,但我不太喜欢这种方式。

如果我对在 FirebirdSQL 中使用事务有误,或者有人知道如何解决我的问题而不是创建与数据库的多个连接,我将不胜感激。

4

2 回答 2

1
  • 不要共享连接。为每个控件创建一个连接。让连接池优化和管理您的物理连接。
  • 不要长时间保持连接打开。如果物理连接中断,您将丢失所有更改。ADO .NET 专为断开连接的方案而设计。
  • 不要使用长时间运行的事务。特别是,永远不要将它们与 Firebird 一起使用。

考虑以下场景:

  • 打开连接,从数据源加载数据,关闭连接。当您需要更改某些内容时,打开连接,更改某些内容,然后关闭连接。
  • 打开连接,从数据源加载数据,关闭连接。当您需要更改某些内容时,请在本地进行更改。跟踪您的所有更改并提交一次(例如,当用户按下“保存”按钮时)。
于 2013-10-16T12:12:53.183 回答
0

Firebird(当然还有 Interbase)支持一个连接中的多个事务。

并且允许某些提供商使用此功能。

看这里:http ://www.ibprovider.com/eng/examples/lcpi_oledb_net__c001__example_0017.html

于 2014-11-20T17:38:59.317 回答