[MSSQL] ->.NET->SQL Scripte ausführen

Tagchen Xperten,

ich habe folgendes Problem

  1. ich habe einige Sql Scripte in .sql Dateien
  2. ich habe ein mit C# geschriebenes Programm

Die sql Scripte wurden bislang per Hand ind er Konsole mittels des osql Befehls ausgeführt und funktionieren alle.

Nun möchte ich aber die sql Scripte innerhalb dieses Programms ausführen, allerdings nicht über den „Start()“ Befehl, da der osql Befehl eventuel ja nicht im Pfad verfügbar sein könnte.

mittels eines einfachen
„SqlCommand myCommand = new SqlCommand(myQuery, myConnection);“
bekomme ich auch eine verbindung zur datenbank und kann, wenn ich einfache scripte mit einem textreader stumpf auslese auch als query string ausführen (Selects, inserts).

nur leider sind solche scripte ja nicht immer einfach, so dass er mir bspw bei
"if exists (…)
drop …
GO

if exists (…)
drop …
GO"
einen syntaxfehler nach den „GO“-Anweisungen auswirft (wohlgemerkt, mit osql funktionieren sie und auch ein händisch eingefügtes „\n“ nach dem „GO“ ergibt keine änderung der fehlermeldung).

Vielleicht hat ja jemand eine Idee, vielleicht ist eoetwas aber auch schon als Methode vorgesehen, nur noch nicht von mir entdeckt worden.

MfG
Christoph

PS.
Ein doppelposting im C# Bereich spare ich mir, da ich davon ausgehe, dass eher jemand, der sich mit DB Problemen beschäftigt solch einer Problematik auskennt :wink:
Sollte ein MOD anders entscheiden, so beuge ich mich natürlich gerne :wink:

Hi,
zu 1.) Was meinst du mit .sql Dateien?
Von einem SQL Dateiformat hab ich noch nie gehoert. Meinst du Text-Dateien?

Ich kenne osql nicht, aber kannst du den oben genannten Befehl auch in eine Zeile schreiben? Vielleciht gehts ja dann. War nur mal so ne Idee…

Gruss
Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

das GO bringt das osql dazu, die Anweisung an das System zu schicken. Es sollte genügen, wenn Du das GO rausschmeißt.

Wenn Du mehr als eine Anweisung hast, reicht Dir ein einfaches execute() nicht aus, sondern Du brauchste ein executeBatch() - oder wie das in deriner Bibliothek sonst heißt.

Kann sein, dass du dann das GO wieder brauchst.

Ein Hoch auf die Experimentelle Informatik.

Gruß

peter

Danke und evt bald Problem Nummero 2 :wink:

Hallo,

das GO bringt das osql dazu, die Anweisung an das System zu
schicken. Es sollte genügen, wenn Du das GO rausschmeißt.

Danke, ich war grad dabei den MSSQL-Syntax Kenner, quasi den Autor der Skripte zu erreichen, um ihm zu entlocken, wozu das Go gut ist.
Das hat sich ja hiermit erledigt.

Wenn Du mehr als eine Anweisung hast, reicht Dir ein einfaches
execute() nicht aus, sondern Du brauchste ein executeBatch() -
oder wie das in deriner Bibliothek sonst heißt.

an sich ist da soetwas gar nicht vorgesehen, bzw habe ich es nicht gefunden (ich glaube das hiess executeQuery())

ich probiere einfach mal anhand vorn überschauberen anweisungen (wie etwa das droppen von allen tables jeweils einzeln), ob diese alle ausgeführt werden.

Das Go werd ich wohl einfach aus dem gelesenen Script rausschmeissen, ist ja zum Glück kein Problem

Kann sein, dass du dann das GO wieder brauchst.

:wink:

Danke für die Hinweise.

Kann sein, dass sich nach dem GO neue Probleme ergeben (derzeit kriege ich noch den Hinweis, das irgendwo nahe den CREATE Anweisungen Fehler sind, kann jedoch sein, dass das deshalb so ist, da die Tables noch alle existieren :wink:

MfG
Christoph

Hi,
zu 1.) Was meinst du mit .sql Dateien?
Von einem SQL Dateiformat hab ich noch nie gehoert. Meinst du
Text-Dateien?

Naja, ascii sql scripte eben.
Text Dateien gibt es in dem Sinne ja auch nicht :wink:
ich dachte halt, dass jeder, der hier in diesem Forum unterwegs ist schon einmal mit SQL Scripten, die ich noch nie in mit einer anderen Endung als .sql gespeichert sah etwas anfangen kann :wink:

Ich kenne osql nicht, aber kannst du den oben genannten Befehl
auch in eine Zeile schreiben? Vielleciht gehts ja dann. War
nur mal so ne Idee…

Der osql Befehl ist Bestandteil der MSDE und dient dazu die .sql SQL-Skripte auszuführen.
damit loggt man sich quasi an einer DB ein und übergibt dieser die im Skript enthltenen BEfehle.

MfG
Christoph

Gruss
Dirk

Tagchen Xperten,

ich habe folgendes Problem

  1. ich habe einige Sql Scripte in .sql Dateien
  2. ich habe ein mit C# geschriebenes Programm

Die sql Scripte wurden bislang per Hand ind er Konsole mittels
des osql Befehls ausgeführt und funktionieren alle.

Nun möchte ich aber die sql Scripte innerhalb dieses Programms
ausführen, allerdings nicht über den „Start()“ Befehl, da der
osql Befehl eventuel ja nicht im Pfad verfügbar sein könnte.

mittels eines einfachen
„SqlCommand myCommand = new SqlCommand(myQuery,
myConnection);“
bekomme ich auch eine verbindung zur datenbank und kann, wenn
ich einfache scripte mit einem textreader stumpf auslese auch
als query string ausführen (Selects, inserts).

nur leider sind solche scripte ja nicht immer einfach, so dass
er mir bspw bei
"if exists (…)
drop …
GO

if exists (…)
drop …
GO"
einen syntaxfehler nach den „GO“-Anweisungen auswirft
(wohlgemerkt, mit osql funktionieren sie und auch ein händisch
eingefügtes „\n“ nach dem „GO“ ergibt keine änderung der
fehlermeldung).

Vielleicht hat ja jemand eine Idee, vielleicht ist eoetwas
aber auch schon als Methode vorgesehen, nur noch nicht von mir
entdeckt worden.

MfG
Christoph

PS.
Ein doppelposting im C# Bereich spare ich mir, da ich davon
ausgehe, dass eher jemand, der sich mit DB Problemen
beschäftigt solch einer Problematik auskennt :wink:
Sollte ein MOD anders entscheiden, so beuge ich mich natürlich
gerne :wink:

Hallo!

Wie schon vorher erwähnt wurde wird durch GO der Teil bis zum GO gegen die Datenbank gefahren. Ich habe mal ein ähnliches Programm geschrieben. Im Prinzip solltest du die Datei bis zum ersten GO durchsuchen und gegen die Datenbank fahren (mit SqlCommand)… dannach bis zum nächsten GO usw…
Hinweis: Ein GO ist okay, wenn nichts anderes in der Zeile steht… (\p sind aber durchaus möglich, also aufpassen)…

grüße
pakl