﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » Business Objects and Data Access (How do I?)  » Transaction processing strange behavior</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Thu, 07 May 2026 03:55:12 GMT</lastBuildDate><ttl>20</ttl><item><title>Transaction processing strange behavior</title><link>http://forum.strataframe.net/FindPost31244.aspx</link><description>Hi,&lt;br/&gt;&lt;br/&gt;For some reason when I try to save data to two tables during a transaction save, sometimes the transaction only commits one of the tables. This is on a website. It happens when a person might put a payment through and the entire transaction fails, and rolls back for some reason. &amp;nbsp; Then the person will try it again within a couple of minutes, and the transaction only commits the data to the 2nd save.&amp;nbsp; See below: &lt;br/&gt;&lt;br/&gt;&lt;span&gt;[codesnippet]&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- first generate a unique transaction key&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim lcTransactionKey As String = AES.BOL.Base.Utils.NewSeqGuid().ToString&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Try&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionBegin(Me.OPPaymentDetail.DataSourceKey, lcTransactionKey, IsolationLevel.ReadCommitted)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- First save data to the contact information table - This save Fails&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.OPPaymentDetail.Save(True, lcTransactionKey)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '-- next get the primary key value and save to ACH detail table - This save Succeeds&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.OPACHInfoBO.ah_op_Key = Me.OPPaymentDetail.GetPostSavePrimaryKeyValue(-1).ToString&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.OPACHInfoBO.Save(True, lcTransactionKey)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionCommit(Me.OPPaymentDetail.DataSourceKey, lcTransactionKey)&lt;br/&gt;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return True&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Catch ex As Exception&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionRollback(Me.OPPaymentDetail.DataSourceKey, lcTransactionKey)&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.SendTransactionReportError()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return False&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Try&lt;br/&gt;&lt;span&gt;[/codesnippet]&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;It seems the 2nd transaction always commits, but the first doesn't.&amp;nbsp; &lt;br/&gt;It's running on SQL Server Express 2005, Windows Server 2003.&amp;nbsp; Could it be some memory cache issue?&lt;br/&gt;&lt;br/&gt;Thanks,&lt;br/&gt;&lt;br/&gt;Marcel</description><pubDate>Tue, 19 Jun 2012 08:09:57 GMT</pubDate><dc:creator>Marcel Heitlager</dc:creator></item><item><title>RE: Transaction processing strange behavior</title><link>http://forum.strataframe.net/FindPost31250.aspx</link><description>Hi Marcel,&lt;br/&gt;&lt;br/&gt;You are welcome!!!&lt;br/&gt;&lt;br/&gt;[quote][b]Marcel Heitlager (6/19/2012)[/b][hr]The thought didn't occur to me that I need to check for success.&amp;nbsp; I always thought that the try/catch would trap for transaction failure automatically without the conditional and skip the rest.Marcel[/quote]&lt;br/&gt;Well, you are right, but since you don't know why the transaction is failing, then I make myself a habit to check the saving results in most of the time either way.&amp;nbsp; Bottom line is that you need to try to figure out why the transaction is failing in order to present the user with a nice message and possible instructions on how to continue after the failing transaction.</description><pubDate>Tue, 19 Jun 2012 08:09:57 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Transaction processing strange behavior</title><link>http://forum.strataframe.net/FindPost31249.aspx</link><description>Thanks for you reply Edhy!&lt;br/&gt;&lt;br/&gt;The thought didn't occur to me that I need to check for success.&amp;nbsp; I always thought that the try/catch would trap for transaction failure automatically without the conditional and skip the rest.&lt;br/&gt;&lt;br/&gt;Marcel</description><pubDate>Tue, 19 Jun 2012 02:56:39 GMT</pubDate><dc:creator>Marcel Heitlager</dc:creator></item><item><title>RE: Transaction processing strange behavior</title><link>http://forum.strataframe.net/FindPost31245.aspx</link><description>Hi Marcel,&lt;br/&gt;&lt;br/&gt;Your transaction looks just fine, except that I would put a condition to the Me.OPPaymentDetail.Save() as follow:&lt;br/&gt;&lt;span&gt;[codesnippet]&lt;br/&gt;&lt;/span&gt;&lt;pre style="font-family:Consolas;font-size:13;color:black;background:white;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;'--&amp;nbsp;first&amp;nbsp;generate&amp;nbsp;a&amp;nbsp;unique&amp;nbsp;transaction&amp;nbsp;key&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Dim&lt;/span&gt;&amp;nbsp;lcTransactionKey&amp;nbsp;&lt;span style="color:blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;String&lt;/span&gt;&amp;nbsp;=&amp;nbsp;AES.BOL.Base.Utils.NewSeqGuid().ToString&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Try&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionBegin(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPPaymentDetail.DataSourceKey,&amp;nbsp;lcTransactionKey,&amp;nbsp;IsolationLevel.ReadCommitted)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'--&amp;nbsp;First&amp;nbsp;save&amp;nbsp;data&amp;nbsp;to&amp;nbsp;the&amp;nbsp;contact&amp;nbsp;information&amp;nbsp;table&amp;nbsp;-&amp;nbsp;This&amp;nbsp;save&amp;nbsp;Fails&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPPaymentDetail.Save(&lt;span style="color:blue;"&gt;True&lt;/span&gt;,&amp;nbsp;lcTransactionKey)&amp;nbsp;=&amp;nbsp;MicroFour.StrataFrame.Data.&lt;span style="color:#2b91af;"&gt;SaveUndoResult&lt;/span&gt;.Success&amp;nbsp;&lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'--&amp;nbsp;next&amp;nbsp;get&amp;nbsp;the&amp;nbsp;primary&amp;nbsp;key&amp;nbsp;value&amp;nbsp;and&amp;nbsp;save&amp;nbsp;to&amp;nbsp;ACH&amp;nbsp;detail&amp;nbsp;table&amp;nbsp;-&amp;nbsp;This&amp;nbsp;save&amp;nbsp;Succeeds&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPACHInfoBO.ah_op_Key&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPPaymentDetail.GetPostSavePrimaryKeyValue(-1).ToString&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPACHInfoBO.Save(&lt;span style="color:blue;"&gt;True&lt;/span&gt;,&amp;nbsp;lcTransactionKey)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionCommit(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPPaymentDetail.DataSourceKey,&amp;nbsp;lcTransactionKey)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Return&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;True&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Catch&lt;/span&gt;&amp;nbsp;ex&amp;nbsp;&lt;span style="color:blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionRollback(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.OPPaymentDetail.DataSourceKey,&amp;nbsp;lcTransactionKey)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.SendTransactionReportError()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Return&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;False&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Try&lt;/span&gt;&lt;br/&gt;&lt;/pre&gt;&lt;span&gt;[/codesnippet]&lt;/span&gt;&lt;br/&gt;Also if your transaction is failing, you are not passing the ex Exception to your Me.SendTransactionReportError() so you don't really know why it may be failing.</description><pubDate>Thu, 14 Jun 2012 16:08:47 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item></channel></rss>