Autor Beitrag
c#ler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Di 16.10.12 19:03 
Hi,
ich habe ein Programm, welches über sqlcmd ein SQL-skript an eine DB schickt und ausführt.
sqlcmd schreibt ein log, welches ich direkt nach Ausführung des Skripts in einer Textbox anzeigen lassen will.
Das Problem hierbei:
Die Logdatei wird geschrieben, aber beim öffnen ist die Log leer.
Starte ich das Programm nun neu und rufe führe dann das Skript nochmal aus, dann erscheint auch das log korrekt in der Textbox...
Das scheint ein Initialisierungsfehler zu sein...aber ich komm nicht drauf, wie ich das umgehen kann.
Hab blockade, bitte um Hilfe.

//SQLCMD Parameter und Ausführung
//script ist der Pfad (inkl. File + Endung) für die Log
//Fn ist der Pfad (inkl. File + Endung) für das SQLSkript
//Die Variablen werden durch Eingaben in Textfelder gefüllt
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
SqlConnectionStringBuilder constrgBuilder = new SqlConnectionStringBuilder();
constrgBuilder.DataSource = server;
constrgBuilder.InitialCatalog = db;
constrgBuilder.UserID = uid;
constrgBuilder.Password = pw;

script = Fn.Substring(0, Fn.Length - 3) + "log";
Process RunSQLScript = new Process();
RunSQLScript.StartInfo.FileName = "sqlcmd.exe";
string connectionparms = "-S " + server + " -d " + db + " -U " + uid + " -P " + pw;
string path_logfile = " -o " + script;
string path_sqlfile = " -i " + Fn;
RunSQLScript.StartInfo.Arguments = connectionparms + path_logfile + path_sqlfile;
RunSQLScript.Start();


//Ausgabe der Scriptausführung in Textbox
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
try
{
ultraTextEditor_returnsqlcommand.Text = File.ReadAllText(script, Encoding.Default);
}
catch (exception ex)
{
MessageBox.Show(ex.message);
}
san-software
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 3



BeitragVerfasst: Do 18.10.12 15:43 
könnte es sein, daß Du zu schnell bist? oder das Script zu langsam :-)

Vielleicht ist die Datei noch nicht gefüllt, wenn Du sie einliest. Ich hatte so was auch schon in ähnlicher Form.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 18.10.12 16:02 
Woher weißt du denn das der sqlcmd.exe fertig ist?

In deinem Code sehe ich nur den Process.Start() Aufruf. Direkt nach dem Process.Start ist aber so wie der Name vermuten lässt der Process nur gestartet aber nicht zwangsweise (oder eher sogar unwahrscheinlich) fertig. Du musst schon warten bis der Process auch fertig ist z.B. durch das abgreifen des Exited Events der Process Klasse.
c#ler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176
Erhaltene Danke: 1

Win7 64Bit
C#, VBA, VS2013 Ultimate
BeitragVerfasst: Di 23.10.12 16:06 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Woher weißt du denn das der sqlcmd.exe fertig ist?

In deinem Code sehe ich nur den Process.Start() Aufruf. Direkt nach dem Process.Start ist aber so wie der Name vermuten lässt der Process nur gestartet aber nicht zwangsweise (oder eher sogar unwahrscheinlich) fertig. Du musst schon warten bis der Process auch fertig ist z.B. durch das abgreifen des Exited Events der Process Klasse.


hab ich bereits getan...ich vermute langsam es liegt teilweise an den Skripten die ich ausführe...ich werd das mal durchsteppen...

ausblenden C#-Quelltext
1:
RunSQLScript.WaitForExit();					


...manchmal wirft er trotzdem leere meldungen aus

neuste Fehlermeldung:
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Unable to complete login process due to delay in opening server connection.

...:/

Ich habe noch ein Dispose und ein Close gesetzt...damit müsste das Problem ja eigentlich gelöst sein.
Möglich, dass es Probleme bei der Ausführung der Skripte gibt, weil beispielsweise eine andere Serverversion erwartet wird oder eine Tabelle nicht existiert