/// <summary> /// Stores a System Default in the DB. If it was already there it gets updated, if it wasn't there it gets added. /// </summary> /// <remarks>The change gets reflected in the System Defaults Cache the next time the System Defaults Cache /// gets accessed.</remarks> /// <param name="AKey">Name of the System Default.</param> /// <param name="AValue">Value of the System Default.</param> /// <param name="AAdded">True if the System Default got added, false if it already existed.</param> /// <remarks>SystemDefault Names are not case sensitive.</remarks> public void SetSystemDefault(String AKey, String AValue, out bool AAdded) { TDataBase DBConnectionObj = null; TDBTransaction WriteTransaction = null; Boolean SubmissionOK = false; SSystemDefaultsTable SystemDefaultsDT; Boolean Added = false; try { // Open a separate DB Connection... DBConnectionObj = DBAccess.SimpleEstablishDBConnection("SetSystemDefault"); // ...and start a DB Transaction on that separate DB Connection DBConnectionObj.BeginAutoTransaction(IsolationLevel.ReadCommitted, ref WriteTransaction, ref SubmissionOK, "SetSystemDefault", delegate { SystemDefaultsDT = SSystemDefaultsAccess.LoadAll(WriteTransaction); // This will find the row that matches a case-insensitive search of the table primary keys SystemDefaultsDT.CaseSensitive = false; // It is anyway SSystemDefaultsRow match = (SSystemDefaultsRow)SystemDefaultsDT.Rows.Find(AKey); if (match != null) { // I already have this System Default in the DB --> simply update the Value in the DB. // (This will often be the case!) match.DefaultValue = AValue; Added = false; } else { // The System Default isn't in the DB yet --> store it in the DB. var SystemDefaultsDR = SystemDefaultsDT.NewRowTyped(true); SystemDefaultsDR.DefaultCode = AKey; SystemDefaultsDR.DefaultDescription = "Created in OpenPetra"; SystemDefaultsDR.DefaultValue = AValue; SystemDefaultsDT.Rows.Add(SystemDefaultsDR); Added = true; } SSystemDefaultsAccess.SubmitChanges(SystemDefaultsDT, WriteTransaction); SubmissionOK = true; }); AAdded = Added; } catch (Exception Exc) { TLogging.Log( "TSystemDefaultCache.SetSystemDefault: An Exception occured during the saving of the System Default '" + AKey + "'. Value to be saved: + '" + AValue + "'" + Environment.NewLine + Exc.ToString()); throw; } finally { if (SubmissionOK) { // We need to ensure that the next time the System Defaults Caches gets accessed it is refreshed from the DB!!! // Obtain thread-safe access to the FTableCached Field to prevent two (or more) Threads from getting a different // FTableCached value! lock (FTableCachedLockCookie) { FTableCached = false; } } if (DBConnectionObj != null) { DBConnectionObj.CloseDBConnection(); } } }
/// <summary> /// Stores a System Default in the DB. If it was already there it gets updated, if it wasn't there it gets added. /// </summary> /// <remarks>The change gets reflected in the System Defaults Cache the next time the System Defaults Cache /// gets accessed.</remarks> /// <param name="AKey">Name of the System Default.</param> /// <param name="AValue">Value of the System Default.</param> /// <param name="AAdded">True if the System Default got added, false if it already existed.</param> /// <remarks>SystemDefault Names are not case sensitive.</remarks> public void SetSystemDefault(String AKey, String AValue, out bool AAdded) { Boolean NewTransaction = false; Boolean ShouldCommit = false; SSystemDefaultsTable SystemDefaultsDT; try { TDBTransaction ReadWriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction( IsolationLevel.ReadCommitted, TEnforceIsolationLevel.eilMinimum, out NewTransaction); SystemDefaultsDT = SSystemDefaultsAccess.LoadAll(ReadWriteTransaction); // This will find the row that matches a case-insensitive search of the table primary keys SystemDefaultsDT.CaseSensitive = false; // It is anyway SSystemDefaultsRow match = (SSystemDefaultsRow)SystemDefaultsDT.Rows.Find(AKey); if (match != null) { // I already have this System Default in the DB --> simply update the Value in the DB. // (This will often be the case!) match.DefaultValue = AValue; AAdded = false; } else { // The System Default isn't in the DB yet --> store it in the DB. var SystemDefaultsDR = SystemDefaultsDT.NewRowTyped(true); SystemDefaultsDR.DefaultCode = AKey; SystemDefaultsDR.DefaultDescription = "Created in OpenPetra"; SystemDefaultsDR.DefaultValue = AValue; SystemDefaultsDT.Rows.Add(SystemDefaultsDR); AAdded = true; } SSystemDefaultsAccess.SubmitChanges(SystemDefaultsDT, ReadWriteTransaction); ShouldCommit = true; } catch (Exception Exc) { TLogging.Log( "TSystemDefaultCache.SetSystemDefault: An Exception occured during the saving of the System Default '" + AKey + "'. Value to be saved: + '" + AValue + "'" + Environment.NewLine + Exc.ToString()); ShouldCommit = false; throw; } finally { if (NewTransaction) { if (ShouldCommit) { DBAccess.GDBAccessObj.CommitTransaction(); // We need to ensure that the next time the System Defaults Caches gets accessed it is refreshed from the DB!!! // Obtain thread-safe access to the FTableCached Field to prevent two (or more) Threads from getting a different // FTableCached value! lock (FTableCachedLockCookie) { FTableCached = false; } } else { DBAccess.GDBAccessObj.RollbackTransaction(); } } } }
/// <summary> /// Stores a System Default in the DB. If it was already there it gets updated, if it wasn't there it gets added. /// </summary> /// <remarks>The change gets reflected in the System Defaults Cache the next time the System Defaults Cache /// gets accessed.</remarks> /// <param name="AKey">Name of the System Default.</param> /// <param name="AValue">Value of the System Default.</param> /// <param name="AAdded">True if the System Default got added, false if it already existed.</param> /// <param name="ADataBase"></param> /// <remarks>SystemDefault Names are not case sensitive.</remarks> public void SetSystemDefault(String AKey, String AValue, out bool AAdded, TDataBase ADataBase = null) { TDataBase DBConnectionObj = null; TDBTransaction WriteTransaction = new TDBTransaction(); bool SubmissionOK = false; SSystemDefaultsTable SystemDefaultsDT; Boolean Added = false; try { // Open a separate DB Connection... DBConnectionObj = DBAccess.Connect("SetSystemDefault", ADataBase); // ...and start a DB Transaction on that separate DB Connection DBConnectionObj.WriteTransaction(ref WriteTransaction, ref SubmissionOK, delegate { SystemDefaultsDT = SSystemDefaultsAccess.LoadAll(WriteTransaction); // This will find the row that matches a case-insensitive search of the table primary keys SystemDefaultsDT.CaseSensitive = false; // It is anyway SSystemDefaultsRow match = (SSystemDefaultsRow)SystemDefaultsDT.Rows.Find(AKey); if (match != null) { // I already have this System Default in the DB --> simply update the Value in the DB. // (This will often be the case!) match.DefaultValue = AValue; Added = false; } else { // The System Default isn't in the DB yet --> store it in the DB. var SystemDefaultsDR = SystemDefaultsDT.NewRowTyped(true); SystemDefaultsDR.DefaultCode = AKey; SystemDefaultsDR.DefaultDescription = "Created in OpenPetra"; SystemDefaultsDR.DefaultValue = AValue; SystemDefaultsDT.Rows.Add(SystemDefaultsDR); Added = true; } SSystemDefaultsAccess.SubmitChanges(SystemDefaultsDT, WriteTransaction); SubmissionOK = true; }); AAdded = Added; } catch (Exception Exc) { TLogging.Log( "TSystemDefaultCache.SetSystemDefault: An Exception occured during the saving of the System Default '" + AKey + "'. Value to be saved: + '" + AValue + "'" + Environment.NewLine + Exc.ToString()); throw; } finally { if (ADataBase == null) { DBConnectionObj.CloseDBConnection(); } if (SubmissionOK && (FSystemDefaultsDT != null)) { // We need to ensure that the next time the System Defaults Caches gets accessed it is refreshed from the DB!!! FSystemDefaultsDT.Clear(); FSystemDefaultsDT = null; } } }