// disposing: true if Dispose() was called, false // if being finalized by the garbage collector protected override void Dispose(bool disposing) { if (disposing) { if (_cn != null) { _cn.Close(); _cn.Dispose(); _cn = null; } if (_schemaLock.IsReadLockHeld) { _schemaLock.ExitReadLock(); } if (_transactionLock != null) { _transactionLock.Dispose(); _transactionLock = null; } } base.Dispose(disposing); }
public SQLiteConnectionED(EDDSqlDbSelection?maindb = null, bool utctimeindicator = false, bool initializing = false, bool shortlived = true) : base(initializing) { bool locktaken = false; try { if (!initializing && !_initialized) { System.Diagnostics.Trace.WriteLine($"Database {typeof(TConn).Name} initialized before Initialize()"); System.Diagnostics.Trace.WriteLine(new System.Diagnostics.StackTrace(2, true).ToString()); if (typeof(TConn) == typeof(SQLiteConnectionUser)) { SQLiteConnectionUser.Initialize(); } else if (typeof(TConn) == typeof(SQLiteConnectionSystem)) { SQLiteConnectionSystem.Initialize(); } } _schemaLock.EnterReadLock(); locktaken = true; // System.Threading.Monitor.Enter(monitor); //Console.WriteLine("Connection open " + System.Threading.Thread.CurrentThread.Name); DBFile = GetSQLiteDBFile(maindb ?? EDDSqlDbSelection.EDDUser); _cn = DbFactory.CreateConnection(); // Use the database selected by maindb as the 'main' database _cn.ConnectionString = "Data Source=" + DBFile + ";Pooling=true;"; if (utctimeindicator) // indicate treat dates as UTC. { _cn.ConnectionString += "DateTimeKind=Utc;"; } _transactionLock = new SQLiteTxnLockED <TConn>(); _cn.Open(); } catch { if (_transactionLock != null) { _transactionLock.Dispose(); } if (locktaken) { _schemaLock.ExitReadLock(); } throw; } }