Skip to content

Instantly share code, notes, and snippets.

@lukencode
Created April 8, 2013 23:27
Show Gist options
  • Save lukencode/5341491 to your computer and use it in GitHub Desktop.
Save lukencode/5341491 to your computer and use it in GitHub Desktop.
DbUp program with dodgy hack to create db if it doesnt exist - good for developing.
public class Program
{
/// <summary>
/// Entry point.
/// </summary>
/// <param name="args">The args.</param>
/// <returns></returns>
static int Main(string[] args)
{
var rawConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
try
{
var connectionString = new SqlConnectionStringBuilder(rawConnectionString);
CreateDbIfNotExists(connectionString);
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message);
Console.ResetColor();
}
var upgrader =
DeployChanges.To
.SqlDatabase(rawConnectionString)
.WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
.LogToConsole()
.Build();
var result = upgrader.PerformUpgrade();
if (!result.Successful)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(result.Error);
Console.ResetColor();
Console.ReadLine();
return -1;
}
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Success!");
Console.ResetColor();
return 0;
}
/// <summary>
/// Creates the db if not exists.
/// </summary>
/// <param name="connectionString">The connection string.</param>
private static void CreateDbIfNotExists(SqlConnectionStringBuilder connectionString)
{
var dbName = connectionString.InitialCatalog;
var user = connectionString.UserID;
var password = connectionString.Password;
var serverConnectionString = string.Format("Data Source={0};Integrated Security=SSPI;", connectionString.DataSource);
var sqlRunner = new AdHocSqlRunner(() => new SqlConnection(serverConnectionString), "dbo");
var createDbSql = string.Format(@"IF db_id('{0}') IS NULL BEGIN CREATE DATABASE {0} END", dbName);
System.Console.WriteLine(createDbSql);
sqlRunner.ExecuteNonQuery(createDbSql);
var createLogin = string.Format(@"IF NOT EXISTS (select loginname from master.dbo.syslogins where name = '{1}')
BEGIN
CREATE LOGIN [{1}] WITH PASSWORD=N'{2}', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
END
Use {0}
CREATE USER {1} FOR LOGIN {1} with default_schema = dbo
EXEC sp_addrolemember 'db_owner', '{1}'", dbName, user, password);
System.Console.WriteLine(createLogin);
sqlRunner.ExecuteNonQuery(createLogin);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment