@@ -53,19 +53,36 @@ public abstract class EsentCursor : IDisposable
5353
5454 protected EsentCursor ( EsentModel model , string database , OpenDatabaseGrbit mode )
5555 {
56- LockObject = new Object ( ) ;
57- Model = model ;
58- Instance = model . Cache . JetInstance ;
59- Sesid = new Session ( Instance ) ;
60- Api . JetOpenDatabase ( Sesid , database , String . Empty , out DbId , mode ) ;
61- Api . JetOpenTable ( Sesid , DbId , GlobalsTableName , null , 0 , mode == OpenDatabaseGrbit . ReadOnly ? OpenTableGrbit . ReadOnly :
62- mode == OpenDatabaseGrbit . Exclusive ? OpenTableGrbit . DenyWrite : OpenTableGrbit . None ,
63- out GlobalsTable ) ;
64- EntityCountColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , EntityCountColumnName ) ;
65- GeometryCountColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , GeometryCountColumnName ) ;
66- FlushColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , FlushColumnName ) ;
67- IfcHeaderColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , ifcHeaderColumnName ) ;
68- ReadOnly = ( mode == OpenDatabaseGrbit . ReadOnly ) ;
56+ try
57+ {
58+ LockObject = new Object ( ) ;
59+ Model = model ;
60+ Instance = model . Cache . JetInstance ;
61+ Sesid = new Session ( Instance ) ;
62+ Api . JetOpenDatabase ( Sesid , database , String . Empty , out DbId , mode ) ;
63+ Api . JetOpenTable ( Sesid , DbId , GlobalsTableName , null , 0 , mode == OpenDatabaseGrbit . ReadOnly ? OpenTableGrbit . ReadOnly :
64+ mode == OpenDatabaseGrbit . Exclusive ? OpenTableGrbit . DenyWrite : OpenTableGrbit . None ,
65+ out GlobalsTable ) ;
66+ EntityCountColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , EntityCountColumnName ) ;
67+ GeometryCountColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , GeometryCountColumnName ) ;
68+ FlushColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , FlushColumnName ) ;
69+ IfcHeaderColumn = Api . GetTableColumnid ( Sesid , GlobalsTable , ifcHeaderColumnName ) ;
70+ ReadOnly = ( mode == OpenDatabaseGrbit . ReadOnly ) ;
71+ }
72+ catch
73+ {
74+ if ( Sesid != null )
75+ {
76+ if ( Table != JET_TABLEID . Nil && ! Table . IsInvalid )
77+ Api . JetCloseTable ( Sesid , Table ) ;
78+ if ( GlobalsTable != JET_TABLEID . Nil && ! GlobalsTable . IsInvalid )
79+ Api . JetCloseTable ( Sesid , GlobalsTable ) ;
80+ if ( DbId != JET_DBID . Nil && DbId != default ( JET_DBID ) )
81+ Api . JetCloseDatabase ( Sesid , DbId , CloseDatabaseGrbit . None ) ;
82+ Api . JetEndSession ( Sesid , EndSessionGrbit . None ) ;
83+ }
84+ throw ;
85+ }
6986 }
7087
7188 internal abstract int RetrieveCount ( ) ;
0 commit comments