public long unversionedEdit(IQueryFilter qFilterGen, int sequenceColumnNum, int idxSeqField, int curLoop, ref ITransactions transactions)
{
long sequenceValue = -1;
using (ComReleaser comReleaser = new ComReleaser())
{
if (AAState._gentabWorkspace.IsInEditOperation)
{
// throw new Exception("Cannot use ITransactions during an edit operation.");
}
// Begin a transaction.
if (transactions == null)
{
transactions = (ITransactions)AAState._gentabWorkspace;
}
transactions.StartTransaction();
try
{
// Use ITable.Update to create an update cursor.
ICursor seq_updateCursor = AAState._gentab.Update(qFilterGen, true);
comReleaser.ManageLifetime(seq_updateCursor);
IRow seq_row = null;
seq_row = seq_updateCursor.NextRow();
int sequenceInt = 1;
if (seq_row != null)
{
if (idxSeqField > 0)
{
object seqInt = seq_row.get_Value(idxSeqField);
if (seqInt != null)
{
if (seqInt != DBNull.Value)
try
{
sequenceInt = Convert.ToInt32(seqInt);
}
catch
{
}
}
}
object seqValue = seq_row.get_Value(sequenceColumnNum);
if (seqValue == null)
{
sequenceValue = 0;
}
else if (seqValue.ToString() == "")
{
sequenceValue = 0;
}
else
try
{
sequenceValue = Convert.ToInt64(seqValue);
}
catch
{
sequenceValue = 0;
}
AAState.WriteLine(" " + sequenceValue + " is the existing value and the interval is " + sequenceInt + ": " + DateTime.Now.ToString("h:mm:ss tt"));
sequenceValue = sequenceValue + sequenceInt;
seq_row.set_Value(sequenceColumnNum, sequenceValue);
AAState.WriteLine(" " + seq_row.Fields.get_Field(sequenceColumnNum).AliasName + " changed to " + sequenceValue + ": " + DateTime.Now.ToString("h:mm:ss tt"));
seq_updateCursor.UpdateRow(seq_row);
transactions.CommitTransaction();
seq_updateCursor = AAState._gentab.Search(qFilter, true);
if (seq_row != null)
{
seqValue = seq_row.get_Value(sequenceColumnNum);
if (seqValue == null)
{
return sequenceValue;
}
else if (seqValue.ToString() == "")
{
return sequenceValue;
}
else
try
{
if (sequenceValue == Convert.ToInt64(seqValue))
{
return sequenceValue;
}
else
{
if (curLoop > 30)
{
MessageBox.Show("A unique ID could not be generated after 30 attempts: " + DateTime.Now.ToString("h:mm:ss tt"));
}
else
{
return unversionedEdit(qFilterGen, sequenceColumnNum, idxSeqField, curLoop + 1, ref transactions);
}
}
}
catch
{
return sequenceValue;
}
}
return sequenceValue;
}
else
{
AAState.WriteLine(" No records found in Generate ID table" + ": " + DateTime.Now.ToString("h:mm:ss tt"));
transactions.AbortTransaction();
return -1;
}
}
catch (COMException comExc)
{
AAState.WriteLine(" Error saving transaction to DB" + ": " + DateTime.Now.ToString("h:mm:ss tt"));
// If an error occurs during the inserts and updates, rollback the transaction.
transactions.AbortTransaction();
return -1;
}
}
}