BitSharp.Esent.EsentBlockTxesStorage.OpenDatabase C# (CSharp) Method

OpenDatabase() private method

private OpenDatabase ( ) : void
return void
        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);
                }
            }
        }