public static eExistResult OneOfRequiredTablesExist(IDbConnection conn, IDbTransaction transaction) { try { string[] arrRequiredTables = DatabaseManager.Schema.RequiredTables.Split(new char[] { ',', ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string sRequiredTableName in arrRequiredTables) { eExistResult err = DoesTableExist(conn, sRequiredTableName); ExcpHelper.ThrowIf(err == eExistResult.Error, "Cannot recognize if table '{0}' exists.", sRequiredTableName); if (err == eExistResult.Exists) { return(eExistResult.Exists); } } return(eExistResult.DoesNotExist); } catch (Exception excp) { m_logger.Error(ExcpHelper.FormatException(excp, "OneOfRequiredTablesExist() ERROR"), excp); } return(eExistResult.Error); }
public static void DropDatabase(bool isTestMode) { string sDatabaseName = ConfigurationManager.AppSettings["database_name"]; string sConnectionString = ConfigurationManager.AppSettings["database_connection_string"]; if (isTestMode) { sConnectionString.Replace(sDatabaseName, "test_" + sDatabaseName); sDatabaseName = "test_" + sDatabaseName; } try { using (IDbConnection conn = new NpgsqlConnection(sConnectionString.Replace(sDatabaseName, ConnectionManager.SystemDatabaseName))) { //conn.Open(); eExistResult eerDatabase = DatabaseManager.DoesDatabaseExist(conn, sDatabaseName); ExcpHelper.ThrowIf(eerDatabase == eExistResult.Error, "Cannot recognize if database '{0}' exists.", sDatabaseName); if (eerDatabase == eExistResult.Exists) { try { DataCopy.ExecuteScalar(conn, null, "select pg_terminate_backend(procpid) from pg_stat_activity where datname='{0}';", sDatabaseName); using (IDbConnection conn2 = new NpgsqlConnection(sConnectionString.Replace(sDatabaseName, ConnectionManager.SystemDatabaseName))) { DataCopy.ExecuteScalar(conn2, null, DatabaseManager.Schema.DeleteDatabaseStatement, sDatabaseName); } m_logger.InfoFormat("Database '{0}' Successfully deleted", sDatabaseName); } catch (Exception excp) { m_logger.Error(ExcpHelper.FormatException(excp, "EnsureDatabase() ERROR - cannot delete {0} Database '{1}'", ConnectionManager.Dialect, sDatabaseName), excp); throw; } } } } catch (System.Exception excpInner) { string sError = string.Format("Cannot verify PostGreSQL Server. Either Server is not installed or invalid priveleges ({0}).\r\n{1}\r\n{2}", sConnectionString, excpInner.Message, excpInner.StackTrace); //MessageBox.Show(sError, "Station Start Error", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new Exception(sError, excpInner); } }
private static void EnsureDatabaseImp(bool isTestMode) { string sDatabaseName = ""; string sConnectionString = ""; if (isTestMode) { sDatabaseName = "test_" + ConnectionManager.DatabaseName; sConnectionString = ConnectionManager.ConnectionString.Replace(ConnectionManager.DatabaseName, sDatabaseName); ConnectionManager.DatabaseName = sDatabaseName; ConnectionManager.ConnectionString = sConnectionString; } else { sDatabaseName = ConnectionManager.DatabaseName; sConnectionString = ConnectionManager.ConnectionString; } try { int counter = 0; while (true) { try { using (IDbConnection conn = new NpgsqlConnection(sConnectionString.Replace(sDatabaseName, ConnectionManager.SystemDatabaseName))) { conn.Open(); } break; } catch (Exception) { Thread.Sleep(1000); counter++; if (counter > 15) { throw; } } } using (IDbConnection conn = new NpgsqlConnection(sConnectionString.Replace(sDatabaseName, ConnectionManager.SystemDatabaseName))) { conn.Open(); eExistResult eerDatabase = DatabaseManager.DoesDatabaseExist(conn, sDatabaseName); ExcpHelper.ThrowIf(eerDatabase == eExistResult.Error, "Cannot recognize if database '{0}' exists.", sDatabaseName); if (eerDatabase == eExistResult.DoesNotExist) { try { DataCopy.ExecuteScalar(conn, null, DatabaseManager.Schema.CreateDatabaseStatement, sDatabaseName); m_logger.InfoFormat("Database '{0}' Successfully created", sDatabaseName); } catch (Exception excp) { m_logger.Excp(excp, "EnsureDatabase() ERROR - cannot create {0} Database '{1}'", ConnectionManager.Dialect, sDatabaseName); throw; } } } foreach (TableStatement ts in DatabaseManager.Schema.TableStatements) { using (IDbConnection conn = ConnectionManager.GetConnection()) { eExistResult eerTable = DoesTableExist(conn, ts.TableName); ExcpHelper.ThrowIf(eerTable == eExistResult.Error, "Cannot recognize if table '{0}' exists.", ts.TableName); foreach (SqlStatement statement in ts.Statements) { if (statement.SqlExecuteType == eSqlExecuteType.Always || // Always (eerTable == eExistResult.Exists && statement.SqlExecuteType == eSqlExecuteType.Exists) || // Table exists (eerTable == eExistResult.DoesNotExist && statement.SqlExecuteType == eSqlExecuteType.DoesNotExist)) // Table does not exist { try { DataCopy.ExecuteScalar(statement.Statement); m_logger.InfoFormat("{0} Successfully executed", statement); } catch (Exception excp) { m_logger.Excp(excp, "EnsureDatabase() ERROR - cannot execute {0} for {1} Database '{2}'", statement, ConnectionManager.Dialect, sDatabaseName); throw; } } else { m_logger.InfoFormat("{0} is skipped. Table {1}.", statement, eerTable); } } } } } catch (System.Exception excpInner) { string sError = string.Format("Cannot verify Server. Either Server is not installed or invalid priveleges ({0}).\r\n{1}\r\n{2}", sConnectionString, excpInner.Message, excpInner.StackTrace); //MessageBox.Show(sError, "Station Start Error", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new Exception(sError, excpInner); } }