public void VerifySchema() { if (string.IsNullOrEmpty(Config.DefaultSchema)) { return; } // TODO: consider database provider var sqlRunner = new AdhocSqlRunner(() => CreateCommand()); sqlRunner.ExecuteNonQuery($@"IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'{Config.DefaultSchema}') Exec('CREATE SCHEMA [{Config.DefaultSchema}]')"); }
void IDatabaseDDLProvider.CreateDatabase(DatabaseInfo dbInfo) { if (dbInfo.DbProvider != DbProviders.SqlServer) { throw new InvalidOperationException("Invalid database provider"); } using (var sqlConnection = GetConnectionFactory(BuildMasterDatabaseConnectionString(dbInfo))()) { sqlConnection.Open(); var sqlRunner = new AdhocSqlRunner(() => sqlConnection.CreateCommand()); sqlRunner.ExecuteNonQuery(@"CREATE DATABASE [@database]".Replace("@database", dbInfo.InitialCatalog)); } }
void IDatabaseDDLProvider.DropDatabase(DatabaseInfo dbInfo) { using (var sqlConnection = GetConnectionFactory(BuildMasterDatabaseConnectionString(dbInfo))()) { sqlConnection.Open(); var sqlRunner = new AdhocSqlRunner(() => sqlConnection.CreateCommand()); sqlRunner.ExecuteNonQuery(@" IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'@database') BEGIN ALTER DATABASE [@database] SET OFFLINE WITH ROLLBACK IMMEDIATE; ALTER DATABASE [@database] SET ONLINE; DROP DATABASE [@database]; END ".Replace("@database", dbInfo.InitialCatalog)); } }
public bool IsFullTextEnabled(IDbConnection connection, string tableName) { string sqlQuery = $@"SELECT convert(int, SERVERPROPERTY('IsFullTextInstalled')) + OBJECTPROPERTY(OBJECT_ID('{tableName}'), 'TableFullTextChangeTrackingOn')"; var records = new AdhocSqlRunner(() => { var dbCommand = CreateDbCommand(); dbCommand.Connection = connection; return(dbCommand); }).ExecuteReader(sqlQuery); bool isEnabled = false; var firstRecord = records.FirstOrDefault(); if (firstRecord != null) { int i; if (int.TryParse(firstRecord.First().Value, out i) && i == 2) { isEnabled = true; } } return(isEnabled); }