Пример #1
0
        //drops the Db if it exists
        protected static DbResult ExecuteDropDatabaseSQLIfExists(string DbConnectionString = null)
        {
            DbResult apiResult = new DbResult();

            try
            {
                string connectionString = DbConnectionString ?? ReadConnectionFromConfig();

                try
                {
                    string databaseName        = connectionString?.Split(';')?.Where(i => i.ToUpper().Contains("CATALOG"))?.FirstOrDefault()?.Split('=')?[1];
                    string newConnectionString = connectionString.Replace(databaseName, "master");

                    bool isSet = DbEntityDbHandler.SetConnectionString(newConnectionString);

                    if (!isSet)
                    {
                        apiResult.SetFailuresAsStatusInResponseFields($"ERROR: UNABLE TO SET NEW CONNECTION STRING IN CONFIG FILE INORDER TO CREATE DATABASE");
                        return(apiResult);
                    }

                    //switch to the master db first ie. u cant drop a db if u are using it
                    //change the db to single use ie. close existing connections
                    //then we can drop it
                    string useMasterSQL = "use master";
                    int    rowsAffected = DbEntityDbHandler.ExecuteNonQuery(useMasterSQL);
                    string alterSQL     = $"ALTER DATABASE {databaseName} SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
                    rowsAffected = DbEntityDbHandler.ExecuteNonQuery(alterSQL);
                    string dropSQL = $"Drop Database {databaseName}";
                    rowsAffected = DbEntityDbHandler.ExecuteNonQuery(dropSQL);
                    apiResult.SetSuccessAsStatusInResponseFields();
                }
                catch (Exception ex)
                {
                    string msg = ex.Message;
                    apiResult.SetFailuresAsStatusInResponseFields($"ERROR: {msg}");
                }

                //rollback stuff
                DbEntityDbHandler.SetConnectionString(connectionString);
                return(apiResult);
            }
            catch (Exception ex)
            {
                string msg = ex.Message;
                apiResult.SetFailuresAsStatusInResponseFields($"ERROR: {msg}");
            }
            return(apiResult);
        }
Пример #2
0
        //Creates the Db if it doesnt exist, updates the db schema and initializes the db connection
        public static DbResult CreateDbIfNotExistsAndUpdateSchema(string DbConnectionString = null)
        {
            DbResult apiResult = new DbResult();

            try
            {
                AutoFindTypesToKeepTrackOf();

                //create the db
                apiResult = ExecuteCreateDatabaseSQLIfNotExists(DbConnectionString);

                //we failed to create the db
                if (apiResult.StatusCode != DbGlobals.SUCCESS_STATUS_CODE)
                {
                    return(apiResult);
                }

                //try to create stored procedures for fetching
                //parameters for any other stored proc
                //this makes calls to any AutoParams method much faster
                //if its successfull otherwise we default to executing raw sql
                CreateStoredProcedures();

                IConfigurationSource source = GetConfigurationSource(DbConnectionString);

                //initialize active record
                ActiveRecordStarter.Initialize(source, TypesToKeepTrackOf.ToArray());
                ActiveRecordStarter.UpdateSchema();

                //we are all good
                _is_init_successfull = true;
                apiResult.SetSuccessAsStatusInResponseFields();
            }
            catch (Exception ex)
            {
                if (ex.Message.ToUpper().Contains("MORE THAN ONCE"))
                {
                    _is_init_successfull = true;
                    apiResult.StatusCode = DbGlobals.SUCCESS_STATUS_CODE;
                    apiResult.StatusDesc = "SUSPECTED DOUBLE INITIALIZE: " + ex.Message;
                }
                else
                {
                    apiResult.SetFailuresAsStatusInResponseFields(EXCEPTION_LEAD_STRING + ex.Message);
                }
            }

            return(apiResult);
        }
Пример #3
0
        //creates the Db if it doesnt exists
        protected static DbResult ExecuteCreateDatabaseSQLIfNotExists(string DbConnectionString = null)
        {
            DbResult apiResult = new DbResult();

            try
            {
                string connectionString = DbConnectionString ?? ReadConnectionFromConfig();
                try
                {
                    string databaseName        = connectionString?.Split(';')?.Where(i => i.ToUpper().Contains("CATALOG"))?.FirstOrDefault()?.Split('=')?[1];
                    string newConnectionString = connectionString.Replace(databaseName, "master");

                    bool isSet = DbEntityDbHandler.SetConnectionString(newConnectionString);

                    if (!isSet)
                    {
                        apiResult.SetFailuresAsStatusInResponseFields($"ERROR: UNABLE TO SET NEW CONNECTION STRING IN CONFIG FILE INORDER TO CREATE DATABASE");
                        return(apiResult);
                    }

                    string createSQL    = $"Create Database {databaseName}";
                    int    rowsAffected = DbEntityDbHandler.ExecuteNonQuery(createSQL);
                    apiResult.SetSuccessAsStatusInResponseFields();
                }
                catch (Exception ex)
                {
                    string msg = ex.Message.ToUpper();
                    if (msg.Contains("ALREADY") || msg.Contains("EXISTS"))
                    {
                        _is_init_of_storedProcs_successfull = true;
                        apiResult.SetSuccessAsStatusInResponseFields();
                    }
                    else
                    {
                        apiResult.SetFailuresAsStatusInResponseFields($"ERROR: {msg}");
                    }
                }

                DbEntityDbHandler.SetConnectionString(connectionString);
                return(apiResult);
            }
            catch (Exception ex)
            {
                string msg = ex.Message;
                apiResult.SetFailuresAsStatusInResponseFields($"ERROR: {msg}");
            }
            return(apiResult);
        }
Пример #4
0
        //find all types that inherit from ActiveRecordBase
        //using reflection
        protected static DbResult AutoFindTypesToKeepTrackOf()
        {
            DbResult dbResult = new DbResult();

            try
            {
                List <Type> types_that_inherit_from_activeRecord = FindDerivedTypes(Assembly.GetEntryAssembly(), typeof(ActiveRecordBase)).ToList();
                TypesToKeepTrackOf.AddRange(types_that_inherit_from_activeRecord);
                dbResult.StatusCode = DbGlobals.SUCCESS_STATUS_CODE;
                dbResult.StatusDesc = DbGlobals.SUCCESS_STATUS_TEXT;
            }
            catch (Exception ex)
            {
                dbResult.StatusCode = DbGlobals.FAILURE_STATUS_CODE;
                dbResult.StatusDesc = $"EXCEPTION: {ex.Message}";
            }
            return(dbResult);
        }
Пример #5
0
        //sets the constring to whatever is read from the config file
        protected static DbResult SetConnectionStringInDatabaseHandler(string dbConnectionString = null)
        {
            DbResult dbResult = new DbResult();

            dbConnectionString = dbConnectionString ?? ReadConnectionFromConfig();

            bool con_string_was_set = DbEntityDbHandler.SetConnectionString(dbConnectionString);

            if (con_string_was_set)
            {
                dbResult.StatusCode = DbGlobals.SUCCESS_STATUS_CODE;
                dbResult.StatusDesc = DbGlobals.SUCCESS_STATUS_TEXT;
                return(dbResult);
            }

            dbResult.StatusCode = DbGlobals.FAILURE_STATUS_CODE;
            dbResult.StatusDesc = "FAILED TO SET CONNECTION STRING";
            return(dbResult);
        }
Пример #6
0
        //Drops the database if its there, creates the database, updates the db schema and initializes the db connection
        public static DbResult DropAndRecreateDb(string DbConnectionString = null)
        {
            DbResult dbResult = new DbResult();

            try
            {
                AutoFindTypesToKeepTrackOf();

                dbResult = SetConnectionStringInDatabaseHandler(DbConnectionString);

                if (dbResult.StatusCode != DbGlobals.SUCCESS_STATUS_CODE)
                {
                    return(dbResult);
                }

                dbResult = ExecuteDropDatabaseSQLIfExists(DbConnectionString);

                if (dbResult.StatusCode != DbGlobals.SUCCESS_STATUS_CODE)
                {
                    return(dbResult);
                }

                return(CreateDbIfNotExistsAndUpdateSchema(DbConnectionString));
            }
            catch (Exception ex)
            {
                if (ex.Message.ToUpper().Contains("MORE THAN ONCE"))
                {
                    _is_init_successfull = true;
                    dbResult.StatusCode  = DbGlobals.SUCCESS_STATUS_CODE;
                    dbResult.StatusDesc  = "SUSPECTED DOUBLE INITIALIZE: " + ex.Message;
                }
                else
                {
                    dbResult.SetFailuresAsStatusInResponseFields(EXCEPTION_LEAD_STRING + ex.Message);
                }
            }

            return(dbResult);
        }
Пример #7
0
        //creates any initial stored procedures necessary
        protected static DbResult CreateStoredProcedures()
        {
            DbResult apiResult = new DbResult();

            try
            {
                string createSql = $"create proc {DbGlobals.NameOfStoredProcToGetParameterNames}" +
                                   " @StoredProcName varchar(200)" +
                                   " as" +
                                   " Begin" +
                                   " select" +
                                   " 'Parameter_name' = name," +
                                   " 'Type' = type_name(user_type_id)," +
                                   " 'Param_order' = parameter_id" +
                                   " from sys.parameters where object_id = object_id(@StoredProcName)" +
                                   " order by Param_order asc" +
                                   " End";
                int rowsAffected = DbEntityDbHandler.ExecuteNonQuery(createSql);
                _is_init_of_storedProcs_successfull = true;
                apiResult.SetSuccessAsStatusInResponseFields();
            }
            catch (Exception ex)
            {
                string msg = ex.Message.ToUpper();

                //stored proc is already there
                if (msg.Contains("ALREADY") || msg.Contains("EXISTS"))
                {
                    _is_init_of_storedProcs_successfull = true;
                    apiResult.SetSuccessAsStatusInResponseFields();
                }
                else
                {
                    apiResult.SetSuccessAsStatusInResponseFields();//($"ERROR: UNABLE TO CREATE NECESSARY STORED PROC's: {msg}");
                }
            }
            return(apiResult);
        }