public void ExecuteWithDatabase(Action <SystemsDatabaseConnection> action, bool usetxnlock = false, SQLExtConnection.AccessMode mode = SQLExtConnection.AccessMode.Reader, int warnthreshold = 500) { Execute(() => ExecuteWithDatabaseInternal(action, usetxnlock, mode), warnthreshold: warnthreshold); }
public T ExecuteWithDatabase <T>(Func <SystemsDatabaseConnection, T> func, bool usetxnlock = false, SQLExtConnection.AccessMode mode = SQLExtConnection.AccessMode.Reader, int warnthreshold = 500) { return(Execute(() => { T ret = default(T); ExecuteWithDatabaseInternal(db => ret = func(db), usetxnlock, mode); return ret; }, warnthreshold: warnthreshold)); }
private void ExecuteWithDatabaseInternal(Action <SystemsDatabaseConnection> action, bool usetxnlock = false, SQLExtConnection.AccessMode mode = SQLExtConnection.AccessMode.Reader) { SQLExtTransactionLock <SQLiteConnectionSystem> tl = null; try { if (usetxnlock) { tl = new SQLExtTransactionLock <SQLiteConnectionSystem>(); if (mode == SQLExtConnection.AccessMode.Reader) { tl.OpenReader(); } else { tl.OpenWriter(); } } using (var conn = new SystemsDatabaseConnection(mode: mode)) { action(conn); } } finally { tl?.Dispose(); } }