public void DetachDB(string alias) { if (String.IsNullOrEmpty(alias)) { throw new ArgumentException("alias can't be null or empty", "alias"); } ExternalDatastore exDS = null; var attachedDataStores = AttachedDataStores; foreach (var ds in attachedDataStores) { if (ds.Alias == alias) { exDS = ds; break; } } if (exDS != null) { attachedDataStores.Remove(exDS); DetachDBInternal(exDS); } }
public void AttachDB(string dbPath, string alias) { if (dbPath == null) { throw new ArgumentNullException("dbPath"); } if (String.IsNullOrEmpty(alias)) { throw new ArgumentException("alias can't be null or empty", "alias"); } var externalDS = new ExternalDatastore() { DbPath = dbPath, Alias = alias }; AttachedDataStores.Add(externalDS); var conn = PersistentConnection; lock (PersistentConnectionSyncLock) { AttachDBInternal(conn, externalDS); } }
//TODO test protected void AttachDBInternal(DbConnection connection, ExternalDatastore externalDB) { if (connection != null) { var commandText = "ATTACH DATABASE \"" + externalDB.DbPath + "\" AS " + externalDB.Alias + ";"; try { connection.ExecuteNonQuery(commandText, (object[])null, CurrentTransaction); } catch (Exception e) { throw ExceptionProcessor.ProcessException(e, connection, commandText, CurrentTransaction); } } }
//TODO test protected void DetachDBInternal(ExternalDatastore externalDB) { lock (PersistentConnectionSyncLock) { var connection = PersistentConnection; if (connection != null) { var commandText = "DETACH DATABASE \"" + externalDB.Alias + "\";"; try { connection.ExecuteNonQuery(commandText, (object[])null, CurrentTransaction); } catch (Exception e) { throw ExceptionProcessor.ProcessException(e, connection, commandText, CurrentTransaction); } } } }
public void AttachDB(Datastore dataStore, string alias) { if (dataStore == null) { throw new ArgumentNullException("dataStore"); } if (String.IsNullOrEmpty(alias)) { throw new ArgumentException("alias can't be null or empty", "alias"); } var externalDS = new ExternalDatastore() { DS = dataStore, Alias = alias }; AttachedDataStores.Add(externalDS); var conn = PersistentConnection; AttachDBInternal(conn, externalDS); }
protected void DetachDBInternal(ExternalDatastore externalDB) { lock (_persistentConnectionSyncLock) { var conn = PersistentConnection; if (conn != null) { this.ExecuteSQL("DETACH DATABASE \"" + externalDB.Alias + "\";", conn); } } }
//public int ExecuteMultiDB(String command, params object[] parameters) //{ // using (DbCommand com = Provider.CreateCommand(command)) // { // return this.ExecuteMultiDB(com, parameters); // } //} //public int ExecuteMultiDB(String command, IEnumerable<KeyValuePair<String, object>> parameters) //{ // using (DbCommand comm = Provider.CreateCommand(command)) // { // if (parameters != null) // { // foreach (var pair in parameters) // { // var param = Provider.CreateParameter(pair.Key, pair.Value); // comm.Parameters.Add(param); // } // } // return ExecuteSQLMultiDB(comm); // } //} //protected int ExecuteMultiDB(DbCommand command, params object[] parameters) //{ // if (parameters != null) // { // foreach (object p in parameters) // { // command.Parameters.Add(Provider.CreateParameter(null, p)); // } // } // return ExecuteSQLMultiDB(command); //} //protected int ExecuteSQLMultiDB(DbCommand command) //{ // lock (_persistentConnectionSyncLock) // { // DbConnection conn = OpenMultiDBConnection(); // try // { // return ExecuteSQL(command, conn); // } // finally // { // ReleaseMultiDBConnection(); // } // } //} //public object ExecuteScalarMultiDB(string query, params object[] parameters) //{ // using (DbCommand comm = Provider.CreateCommand(query)) // { // if (parameters != null) // { // foreach (object val in parameters) // { // comm.Parameters.Add(Provider.CreateParameter(null, val)); // } // } // object value = ExecuteScalarMultiDB(comm); // return (value is DBNull) ? null : value; // } //} //protected object ExecuteScalarMultiDB(DbCommand command) //{ // lock (_multiDBpersistentConnectionSyncLock) // { // DbConnection conn = OpenMultiDBConnection(); // try // { // return ExecuteScalarMultiDB(command, conn); // } // finally // { // ReleaseMultiDBConnection(); // } // } //} //protected object ExecuteScalarMultiDB(DbCommand command, DbConnection conn) //{ // try // { // command.Connection = conn; // return command.ExecuteScalar(); // } // catch (Exception e) // { // throw this.ThrowExceptionHelper(conn, command, e); // } //} //public T ExecuteScalarMultiDB<T>(String query) //{ // return ExecuteScalar<T>(query, (object[])null); //} //public T ExecuteScalarMultiDB<T>(String query, params object[] parameters) //{ // using (DbCommand comm = Provider.CreateCommand(query)) // { // if (parameters != null) // { // foreach (object val in parameters) // { // comm.Parameters.Add(Provider.CreateParameter(null, val)); // } // } // return ExecuteScalarMultiDB<T>(comm); // } //} //public T ExecuteScalarMultiDB<T>(String query, IEnumerable<KeyValuePair<String, object>> parameters) //{ // using (DbCommand comm = Provider.CreateCommand(query)) // { // if (parameters != null) // { // foreach (var pair in parameters) // { // var param = Provider.CreateParameter(pair.Key, pair.Value); // comm.Parameters.Add(param); // } // } // return ExecuteScalarMultiDB<T>(comm); // } //} //protected T ExecuteScalarMultiDB<T>(DbCommand command) //{ // DbConnection conn = OpenMultiDBConnection(); // try // { // return this.ExecuteScalarMultiDB<T>(command, conn); // } // finally // { // ReleaseMultiDBConnection(); // } //} //protected T ExecuteScalarMultiDB<T>(DbCommand command, DbConnection conn) //{ // object result = ExecuteScalarMultiDB(command, conn); // if (result is DBNull) // { // return default(T); // } // else if (result is T) // { // return (T)result; // } // else // { // Type t = typeof(T); // if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) // { // t = Nullable.GetUnderlyingType(t); // } // return (T)Convert.ChangeType(result, t // , System.Globalization.CultureInfo.CurrentCulture); // //return (T)Convert.ChangeType(result, typeof(T)); // } //} #endregion multiDB execute commands #region Attach/Detach public void AttachDB(DatastoreRedux dataStore, string alias) { if (dataStore == null) { throw new ArgumentNullException("dataStore"); } if (String.IsNullOrEmpty(alias)) { throw new ArgumentException("alias can't be null or empty", "alias"); } Debug.Assert(_attachedDataStores != null); var externalDS = new ExternalDatastore() { DS = dataStore, Alias = alias }; _attachedDataStores.Add(externalDS); AttachDBInternal(externalDS); }