2012-05-03 14 views
5

Ich habe eine C# .net-Anwendung, die separat zu mehreren Clients verteilt wurde, hin und wieder fügen wir einige neue Funktionen oder beheben Sie einige Fehler und häufig Änderungen in der DB. Ich benutze Click-Click-Deployment-Ansatz, um die exe auf meine Client-PCs zu aktualisieren. SQL Server-Instanz wurde auf ihrem System installiert.Ausführen von SQL-Skript mit. NET ausführbare Datei

Ich möchte wissen, wie ich ihre SQL-Datenbank mit jeder exe Aktualisierung aktualisieren könnte.

Bitte beachten Sie, dass es möglich ist, dass ein Client an Version 2 arbeitet und nie auf Version 3 aktualisiert wird. Wenn Version 4 jedoch veröffentlicht wird, aktualisiert er die Anwendung. In diesem Fall muss ich zwei Skripte in seiner Datenbank ausführen. Eine für Version 3 und andere aktuelle Version, die 4.

Dank

Antwort

2

Angenommen, Sie haben eine gespeicherte Prozedur/ein Skript, das eine Version auf eine andere aktualisieren kann und davon ausgeht, dass Sie keine andere ausführbare Datei laden können, warum führen Sie nicht einfach einen Aufruf ein, um es am Anfang auszuführen von der neuen Version? Gibt es eine Überprüfung, wenn die Software geladen wird, um zu sehen, ob sie die richtige Version der Datenbank verwenden, wenn nicht, aktualisieren Sie sie. Um Probleme wie den Wechsel von Version 2 zu Version 4 zu behandeln, vergewissern Sie sich, dass die Datenbank selbst registriert, welche Version sie gerade ist.

+0

Also muss ich alle Skripte der Datenbank in meiner ausführbaren Datei behalten Wenn Benutzer die EXE aktualisieren, sollte ihr entsprechendes Skript verfügbar sein. – MegaMind

+0

ja, Sie müssen auch eine Flag-Version in der Datenbank hinzufügen :) – ykatchou

0

Sie ist sqlcmd könnten versuchen, und rufen Sie einfach die EXE aus Sie Anwendung mit den DB-Updates.

0

Dies ist ein Szenario, das am besten mit "Datenbankmigrationen" gelöst wird. Es gibt mehrere Tools im .net-Ökosystem, die Ihnen dabei helfen können. Einige der Tools werden mit einem separaten Runner geliefert, während andere als eine .net-Assembly zusammengestellt werden können, die Sie in Ihr Projekt einbeziehen können.

Beispiele sind:

0

ich zwei Komponenten erstellt haben Um dieses Problem zu lösen:

1.

Eine WinForms-Anwendung, die eine bestimmte SQL-DB sowie eine SQL-Lösung Ordner mit scruipt Dateien analysiert. Anschließend werden die Skriptdateien an die SQL-Objekte gematcht und ich kann eine "Manifest.xml" erstellen, die eine Ausführungsreihenfolge für die verschiedenen Skriptdateien enthält.

Die Skriptdateien für die Tabellen enthalten Anweisungen zur Aktualisierung der Tabellenstruktur pro Version.

Der Builder kopiert dann die relevanten Skriptdateien zusammen mit dem Manifest an einen bestimmten Speicherort. Normalerweise kopiere ich diese zusammen mit meiner App, wenn ich keine Angst habe, meinen App-Ordner zu überfüllen. Ansonsten komprimiere ich sie zu einem passwortgeschützten 7-zip.

2.

Eine Befehlszeile-Anwendung, die (falls erforderlich) und führt das manifest entpackt. Die eigentliche Arbeit wird in einer separaten Klassenbibliothek erledigt, die in meine Apps integriert werden kann.

Dann in meiner App, wann immer meine Appversion> dbversion ich das Upgrade ausführen.

In Setups, bei denen nur ein Staging- und Produktionssetup bei einem einzelnen Kunden stattfindet und normalerweise keine App involviert ist, verwende ich die eigenständige CLI-App manuell. Es ist ein einfacher Weg, um Updates zu pushen, besonders wenn Sie 20 Ansichten geändert haben und WIRKLICH keine Lust haben, sie alle in SQL Mgt Studio zu kopieren/einfügen: p