Ich muss ein SQL-Skript ausführen, das in einer Datei aus meiner C# -Anwendung ist. Das Problem ist, dass es Objekte erstellt und Befehle auf verschiedenen Datenbanken ausführt.C# SQL Server-Skript ändern Datenbankproblem
Im Skript jedes Mal, ich brauche die aktuelle Datenbank ändern sie den Befehl verwendet
USE [databasename]
und da gibt es viele Objekterstellungen sind verwendet es den Befehl GO
eine Menge Zeit, so dass ich gelesen die Datei, bis ich einen GO-Befehl finde und den Satz in der Datenbank laufen lasse; So weit, so gut, aber nachdem der Befehl ausgeführt wurde, kehrt die Verbindung zur Standarddatenbank (in diesem Fall Master) zurück, wobei der letzte USE-Satz ignoriert wird.
Dies ist der Code, den ich verwende, um die Datei zu lesen und das Skript auszuführen.
using (StreamReader reader = new StreamReader(databaseScriptFile)) { DatabaseFactory.CreateDatabase() Database db = new SqlDatabase(connectionstring); txbuilder = new StringBuilder(); bool lastExecute = true; while (!reader.EndOfStream) { text = reader.ReadLine(); if (text.Trim().ToUpper() != "GO") { lastExecute = false; txbuilder.AppendLine(text); } else { lastExecute = true; db.ExecuteNonQuery(CommandType.Text, txbuilder.ToString()); txbuilder.Length = 0; } } //Make sure that the last sentence is executed if (!lastExecute) db.ExecuteNonQuery(CommandType.Text, txbuilder.ToString()); }
Es scheint, dass es die Verbindung nach jeder ExecuteNonQuery Befehl ausführen sp_reset_conection löscht (das ist, was ich im Profiler erhalten)
Gibt es eine elegante und einfache Möglichkeit, dies zu erledige?
Dank
Was hat das mit 'Enterprise-Library' zu tun? –
Ich verwende das Datenbankobjekt der Enterprise-Bibliothek, um die Skripts auszuführen – DkAngelito