private void OpenDatabase()
{
var readOnly = false;
using (var jetSession = new Session(this.jetInstance))
{
var attachGrbit = AttachDatabaseGrbit.None;
if (readOnly)
attachGrbit |= AttachDatabaseGrbit.ReadOnly;
if (EsentVersion.SupportsWindows7Features)
attachGrbit |= Windows7Grbits.EnableAttachDbBackgroundMaintenance;
Api.JetAttachDatabase(jetSession, this.jetDatabase, attachGrbit);
var success = false;
try
{
JET_DBID blockDbId;
Api.JetOpenDatabase(jetSession, this.jetDatabase, "", out blockDbId, readOnly ? OpenDatabaseGrbit.ReadOnly : OpenDatabaseGrbit.None);
try
{
using (var handle = this.cursorCache.TakeItem())
{
var cursor = handle.Item;
// reset flush column
using (var jetUpdate = cursor.jetSession.BeginUpdate(cursor.globalsTableId, JET_prep.Replace))
{
Api.SetColumn(cursor.jetSession, cursor.globalsTableId, cursor.flushColumnId, 0);
jetUpdate.Save();
}
}
success = true;
}
finally
{
if (!success)
Api.JetCloseDatabase(jetSession, blockDbId, CloseDatabaseGrbit.None);
}
}
finally
{
if (!success)
Api.JetDetachDatabase(jetSession, this.jetDatabase);
}
}
}