コード例 #1
0
 void CheckDatabseProvider(IAnyDbSetting setting)
 {
     if (setting.DatabaseProvider != DatabaseProvider.SqLite)
     {
         throw new Exception("DatabaseProvider must be DatabaseProvider.SqLite");
     }
 }
コード例 #2
0
 void CheckDatabseProvider(IAnyDbSetting setting)
 {
     if (setting.DatabaseProvider != DatabaseProvider.PostgreSql)
     {
         throw new Exception("DatabaseProvider must be DatabaseProvider.PostgreSql");
     }
 }
コード例 #3
0
        public void DropDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["Database"];
                sb["Database"]           = "postgres";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '{dbName}' AND pid <> pg_backend_pid(); ";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = $"drop database if exists {dbName}";
                        cmd.ExecuteNonQuery();
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #4
0
        public bool ExistsDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["Database"];
                sb["Database"]           = "postgres";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"SELECT count(datname) from pg_database WHERE datname='{dbName}'";
                        return(Convert.ToInt32(cmd.ExecuteScalar()) > 0);
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #5
0
        public bool ExistsDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["Database"];
                sb["Database"]           = "mysql";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"SHOW DATABASES LIKE '{dbName}';";
                        using (IDataReader reader = cmd.ExecuteReader())
                        {
                            return(reader.Read());
                        }
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #6
0
        public void CreateDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["Database"];
                sb["Database"]           = "postgres";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"CREATE DATABASE {dbName} ENCODING = 'UTF8';";
                        cmd.ExecuteNonQuery();
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #7
0
        public bool ExistsDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["InitialCatalog"];
                sb["InitialCatalog"]     = "master";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"select isnull(DB_ID(N'{dbName}'), -1)";
                        return(Convert.ToInt32(cmd.ExecuteScalar()) > -1);
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #8
0
        public void DropDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["InitialCatalog"];
                sb["InitialCatalog"]     = "master";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"IF DB_ID (N'{dbName}') IS NOT NULL DROP DATABASE {dbName}";
                        cmd.ExecuteNonQuery();
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #9
0
        public void CreateDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            string original = setting.ConnectionString;

            try
            {
                AnyDbConnectionStringBuilder sb = new AnyDbConnectionStringBuilder(setting.ConnectionString);
                string dbName = (string)sb["InitialCatalog"];
                sb["InitialCatalog"]     = "master";
                setting.ConnectionString = sb.ToString();
                AnyDbFactory factory = new AnyDbFactory(setting);
                using (AnyDbConnection con = factory.OpenConnection())
                    using (AnyDbCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = $"CREATE DATABASE {dbName}";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = $"ALTER DATABASE {dbName} SET RECOVERY SIMPLE";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = $"alter database {dbName} set allow_snapshot_isolation on;";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = $"alter database {dbName} set read_committed_snapshot on;";
                        cmd.ExecuteNonQuery();
                    }
            }
            finally
            {
                setting.ConnectionString = original;
            }
        }
コード例 #10
0
 public AnyDbFactory(IAnyDbSetting anyDbSetting, IAnyDbAnnouncer announcer = null)
 {
     if (anyDbSetting == null)
     {
         throw new ArgumentNullException(nameof(anyDbSetting));
     }
     _announcer   = announcer;
     AnyDbSetting = anyDbSetting;
 }
コード例 #11
0
        public bool ExistsDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            AnyDbConnectionStringBuilder sb = CheckConnectionString(setting.ConnectionString);
            string fileName = (string)sb["Data Source"];

            return(File.Exists(fileName));
        }
コード例 #12
0
        public void CreateDatabase(IAnyDbSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            CheckDatabseProvider(setting);
            AnyDbConnectionStringBuilder sb = CheckConnectionString(setting.ConnectionString);

            CheckFolder(Path.GetDirectoryName((string)sb["Data Source"]));
            AnyDbFactory factory = new AnyDbFactory(setting);

            using (AnyDbConnection con = factory.OpenConnection())
                using (AnyDbCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = "PRAGMA encoding = 'UTF-8'";
                    cmd.ExecuteNonQuery();
                }
        }
コード例 #13
0
 public void CreateDatabase(IAnyDbSetting setting)
 {
     throw new NotImplementedException();
 }
コード例 #14
0
 public bool ExistsDatabase(IAnyDbSetting setting)
 {
     throw new NotImplementedException();
 }