private void ScriptThreadProc() { //WorkerThreadArguments arguments = (WorkerThreadArguments)threadArguments; CollationChanger collationChanger = new CollationChanger(); ScriptStepCollection script = null; SqlConnection connection = null; try { script = collationChanger.GenerateScript(workerThreadArguments.Callback, workerThreadArguments.Server, workerThreadArguments.UserId, workerThreadArguments.Password, workerThreadArguments.Database, workerThreadArguments.DropAllConstraints, workerThreadArguments.Collation, workerThreadArguments.Language, workerThreadArguments.SetSingleUser); if (script != null) { if (workerThreadArguments.ScriptOnly) { BeginInvoke(new ScriptCompleteCallback(ScriptComplete), new object[] { script }); } else { connection = new SqlConnection(Utils.ConnectionString(workerThreadArguments.Server, workerThreadArguments.UserId, workerThreadArguments.Password)); connection.Open(); script.Execute(connection, workerThreadArguments.Callback); BeginInvoke(new ExecuteCompleteCallback(ExecuteComplete)); } } else { BeginInvoke(new ScriptCompleteCallback(ScriptComplete), new object[] { null }); } } catch (ThreadAbortException) { throw; } catch (Exception ex) { BeginInvoke(new ScriptCompleteErrorCallback(ScriptComplete), new object[] { ex }); } finally { if (connection != null) { connection.Dispose(); } } lock (this) { workerThread = null; } }
public ScriptStepCollection GenerateScript(IScriptExecuteCallback callback, string server, string userId, string password, string database, bool dropAllConstraints, string collation, FullTextLanguage language, bool setSingleUser) { SqlConnection connection = new SqlConnection(); connection.ConnectionString = Utils.ConnectionString(server, userId, password); try { connection.Open(); ScriptStepCollection script = LoadScript(new Version(connection.ServerVersion), database, dropAllConstraints, collation, language, setSingleUser); //now get the last script entry and replace it with //a special component that will return out ScriptStepGenerateScript generator = new ScriptStepGenerateScript(script[script.Count - 1]); script[script.Count - 1] = generator; script.Execute(connection, callback); return(generator.Script); } finally { connection.Dispose(); } }