コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }