Using DbUp - The first go...

Technical Director at Luminary. Umbraco 3x MVP.
Search for a command to run...

Technical Director at Luminary. Umbraco 3x MVP.
No comments yet. Be the first to comment.
Instructions

How does this even compute? What has digging a trench have to do with Software Engineering and building products?

My workplace Luminary turned 24 on 1-July-2023.

Headless in Umbraco core

Automate meeting host rotations within your team with some smarts

So a release was coming up with multiple SQL scripts to be executed in a sequence. The best bet was to use a tool such as DbUp to automate the process.
DbUp is a .NET library that helps you to deploy changes to SQL Server databases. It tracks which SQL scripts have been run already, and runs the change scripts that are needed to get your database up to date.
I used the default example on http://dbup.github.io/ to start off. But my scripts timed out as I had the embedded SQL scripts doing some serious data uploads as well.
A solution to the timeout problem can be found here https://phejndorf.wordpress.com/2014/07/02/setting-execution-timeout-in-dbup/
So the final code looks like the following with a deviation to use a configuration file with the connection string:
static int Main(string\[\] args)
{
var connectionString \=
args.FirstOrDefault()
?? ConfigurationManager
.ConnectionStrings\["DefaultConnection"\]
.ConnectionString;
var upgradeEngineBuilder \=
DeployChanges.To
.SqlDatabase(connectionString)
.WithScriptsEmbeddedInAssembly(
Assembly.GetExecutingAssembly());
upgradeEngineBuilder.Configure(c \=>
{
// 30 minutes in seconds
c.ScriptExecutor.ExecutionTimeoutSeconds \= 30 \* 60;
Console.WriteLine("Configure ExecutionTimeoutSeconds to "
+ c.ScriptExecutor.ExecutionTimeoutSeconds);
});
var upgrader \= upgradeEngineBuilder.LogToConsole().Build();
var result \= upgrader.PerformUpgrade();
if (!result.Successful)
{
Console.ForegroundColor \= ConsoleColor.Red;
Console.WriteLine(result.Error);
Console.ResetColor();
Console.ReadKey();
return \-1;
}
Console.ForegroundColor \= ConsoleColor.Green;
Console.WriteLine("Success!");
Console.ResetColor();
Console.ReadKey();
return 0;
}
This article was originally written on Google's Blogger platform and ported to Hashnode on 17 Sep 2022.