/// <summary> /// Create DataBase if not exist /// </summary> protected void CreateDataBase() { lock (this) { if (DataBaseExist()) { return; } var sqlBuild = DataBaseTypes != DataBaseTypes.PostgreSql ? new SqlConnectionStringBuilder(ConnectionString) : null; var npSqlBuilder = DataBaseTypes == DataBaseTypes.PostgreSql ? new NpgsqlConnectionStringBuilder(ConnectionString) : null; var dbName = DataBaseTypes == DataBaseTypes.Mssql ? sqlBuild?.InitialCatalog : sqlBuild?.DataSource; if (string.IsNullOrEmpty(dbName) && DataBaseTypes != DataBaseTypes.PostgreSql) { throw new EntityException("InitialCatalog can not be null or empty"); } if (DataBaseTypes == DataBaseTypes.PostgreSql && string.IsNullOrEmpty(npSqlBuilder.Database)) { throw new EntityException("Database can not be null or empty"); } if (DataBaseTypes == DataBaseTypes.Mssql) { sqlBuild.InitialCatalog = "master"; var tr = new DbRepository(sqlBuild.ToString(), DataBaseTypes); var cmd = tr.GetSqlCommand($"Create DataBase [{dbName.Trim()}]"); tr.ExecuteNonQuery(cmd); } else if (DataBaseTypes == DataBaseTypes.Sqllight) { SQLiteConnection.CreateFile(dbName.Trim()); } else { dbName = npSqlBuilder.Database; npSqlBuilder.Database = ""; var tr = new DbRepository(npSqlBuilder.ToString(), DataBaseTypes); var cmd = tr.GetSqlCommand($"Create DataBase {dbName}"); tr.ExecuteNonQuery(cmd); } var latestChanges = GetCodeLatestChanges(); if (latestChanges.Any()) { latestChanges.Execute(true); } } }
/// <summary> /// Validate if database exist /// </summary> /// <returns></returns> protected bool DataBaseExist() { var sqlBuild = DataBaseTypes != DataBaseTypes.PostgreSql ? new SqlConnectionStringBuilder(ConnectionString) : null; var npSqlBuilder = DataBaseTypes == DataBaseTypes.PostgreSql ? new NpgsqlConnectionStringBuilder(ConnectionString) : null; var dbName = DataBaseTypes == DataBaseTypes.Mssql ? sqlBuild.InitialCatalog : sqlBuild?.DataSource; if (string.IsNullOrEmpty(dbName) && DataBaseTypes != DataBaseTypes.PostgreSql) { throw new EntityException("InitialCatalog can not be null or empty"); } if (DataBaseTypes == DataBaseTypes.PostgreSql && string.IsNullOrEmpty(npSqlBuilder.Database)) { throw new EntityException("Database can not be null or empty"); } if (DataBaseTypes == DataBaseTypes.Mssql) { sqlBuild.InitialCatalog = "master"; var tr = new DbRepository(sqlBuild.ToString(), DataBaseTypes); var cmd = tr.GetSqlCommand($"SELECT CAST(CASE WHEN db_id(String[{dbName}]) is not null THEN 1 ELSE 0 END AS BIT)"); return(tr.ExecuteScalar(cmd).ConvertValue <bool>()); } else if (DataBaseTypes == DataBaseTypes.Sqllight) { try { var tr = new DbRepository(sqlBuild.ToString(), DataBaseTypes); tr.ValidateConnection(); return(true); } catch { return(false); } } else { dbName = npSqlBuilder.Database; npSqlBuilder.Database = ""; var tr = new DbRepository(npSqlBuilder.ToString(), DataBaseTypes); var cmd = tr.GetSqlCommand($"SELECT CAST(CASE WHEN datname is not null THEN 1 ELSE 0 END AS BIT) from pg_database WHERE lower(datname) = lower(String[{dbName}])"); return(tr.ExecuteScalar(cmd).ConvertValue <bool>()); } }
/// <summary> /// Create DataBase if not exist /// </summary> protected void CreateDataBase() { lock (this) { if (DataBaseExist()) { return; } var sqlBuild = new TransactionConnectionString(DataBaseTypes, ConnectionString); if (string.IsNullOrEmpty(sqlBuild.InitialCatalog)) { throw new EntityException("InitialCatalog, Database or DataSource can not be null or empty"); } var dbName = sqlBuild.InitialCatalog; if (DataBaseTypes == DataBaseTypes.Mssql) { sqlBuild.InitialCatalog = ""; using (var rep = new DbRepository(sqlBuild.ToString(), DataBaseTypes)) rep.GetSqlCommand($"Create DataBase [{dbName.Trim()}]").ExecuteNonQuery(); } else if (DataBaseTypes == DataBaseTypes.Sqllight) { File.Create(sqlBuild.ToString().Trim()).Close(); } else { sqlBuild.InitialCatalog = ""; using (var rep = new DbRepository(sqlBuild.ToString(), DataBaseTypes)) rep.GetSqlCommand($"Create DataBase {dbName}").ExecuteNonQuery(); } var latestChanges = GetCodeLatestChanges(); if (latestChanges.Any()) { latestChanges.Execute(true); } } }
/// <summary> /// Validate if database exist /// </summary> /// <returns></returns> protected bool DataBaseExist() { var sqlBuild = new TransactionConnectionString(DataBaseTypes, ConnectionString); if (string.IsNullOrEmpty(sqlBuild.InitialCatalog)) { throw new EntityException("InitialCatalog, Database or DataSource can not be null or empty"); } var dbName = sqlBuild.InitialCatalog; if (DataBaseTypes == DataBaseTypes.Mssql) { sqlBuild.InitialCatalog = ""; using (var rep = new DbRepository(sqlBuild.ToString(), DataBaseTypes)) return(rep.GetSqlCommand($"SELECT CAST(CASE WHEN db_id(String[{dbName}]) is not null THEN 1 ELSE 0 END AS BIT)").ExecuteScalar().ConvertValue <bool>()); } else if (DataBaseTypes == DataBaseTypes.Sqllight) { try { using (var rep = new DbRepository(sqlBuild.ToString(), DataBaseTypes)) rep.ValidateConnection(); return(true); } catch { return(false); } } else { sqlBuild.InitialCatalog = ""; using (var rep = new DbRepository(sqlBuild.ToString(), DataBaseTypes)) return(rep.GetSqlCommand($"SELECT CAST(CASE WHEN datname is not null THEN 1 ELSE 0 END AS BIT) from pg_database WHERE lower(datname) = lower(String[{dbName}])").ExecuteScalar().ConvertValue <bool>()); } }