using System; using System.Collections.Generic; using System.Text; using System.Data.Sql; using System.Data.SqlClient; // Add .Net Reference Microsoft.SqlServer.ConnectionInfo using Microsoft.SqlServer.Management.Common; // Add .Net Reference Microsoft.SqlServer.Smo using Microsoft.SqlServer.Management.Smo; namespace DataLoader { public delegate void SQLScriptRunnerEvent(object sender, SqlInfoMessageEventArgs args); public class SQLScriptRunner { public event SQLScriptRunnerEvent InfoMessage; public void OnInfoMessage(object sender, SqlInfoMessageEventArgs args) { if (InfoMessage != null) InfoMessage(sender, args); } private string _Script; public string Script { get { return _Script; } set { _Script = value; } } private string _ConnectionString; public string ConnectionString { get { return _ConnectionString; } set { _ConnectionString = value; } } public SQLScriptRunner(string script, string connectionString) { _Script = script; _ConnectionString = connectionString; } public SQLScriptRunner(string dbName, string backupFolder, string connectionString, DateTime dateTime, string suffix) { _Script = string.Format("Backup database [{0}] to disk = '{1}\\{0}_{2}{3}.BAK'\r\n" + "GO\r\nPRINT '{0} backed up to {1}\\{0}_{2}{3}.BAK'", dbName, backupFolder, dateTime.ToString("yyyyMMdd_HHmm"),suffix); _ConnectionString = connectionString; } public void Run() { SqlConnection cn = new SqlConnection(ConnectionString); cn.Open(); cn.InfoMessage += new SqlInfoMessageEventHandler(cn_InfoMessage); Server srv = new Server(new ServerConnection(cn)); srv.ConnectionContext.ExecuteNonQuery(Script); cn.Close(); } void cn_InfoMessage(object sender, SqlInfoMessageEventArgs e) { OnInfoMessage(sender, e); } } }