使用FirebirdSQL的多个事务(C#)

时间:2013-10-16 11:59:45

标签: c# winforms transactions firebird

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

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

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

这很好但突然间我遇到了在我的应用程序中使用多个事务的问题。如果在一个应用程序中同时使用多个编辑控件,则看起来您无法在一个连接中创建和使用多个事务。

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

如果我在使用FirebirdSQL中的事务时错了,或者任何人都知道如何解决我的问题而不是创建与DB的多个连接,我会很感激这些建议。

2 个答案:

答案 0 :(得分:1)

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

考虑以下情况:

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

答案 1 :(得分:0)

Firebird(当然,也是Interbase)支持一个连接中的多个事务。

允许一些提供商使用此功能。

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