Running SQL scripts in C#
csharp
dotnet
sql
How to run a bunch of SQL scripts inside a C# program.
A simple problem
I needed to run a directory full of SQL scripts in a SQL Server instance.
Here’s a bit of code that:
- Reads in any script called
*.sql
from a directory that does not have the word ’test’ somewhere in it - Uses the
Microsoft.SqlServer.Management.Common
and Microsoft.SqlServer.Management.Smo
- Executes each script in turn using name-based sorting for the order of execution.
Get it done!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| public bool RestoreFieldDatabaseFromBackup(string connectionString)
{
List scripts = this._sqlDirectory.GetFiles("*.sql", SearchOption.AllDirectories)
.Where(s => !s.Name.Contains("test"))
.Select(s => s.FullName).ToList();
if (scripts.Count() == 0) return false;
var connection = new SqlConnection(connectionString);
try
{
for (int i = 0; i < scripts.Count; i++)
{
using (var reader = new StreamReader(scripts[i]))
{
var server = new Server(new ServerConnection(connection));
var db = new Database(server, connection.Database);
string scriptText = reader.ReadToEnd();
Log.For(this).Debug("Running: " + scripts[i]);
db.ExecuteNonQuery(scriptText);
}
}
}
catch (Exception ex)
{
Log.For(this).Error(ex);
return false;
}
return true;
}
|
See Also
🔗 Share on LinkedIn or visit me on Mastodon