Jestem pewien, że na to pytanie już udzielono odpowiedzi, jednak nie mogłem znaleźć odpowiedzi za pomocą narzędzia wyszukiwania.
Używając C #, chciałbym uruchomić plik .sql. Plik sql zawiera wiele instrukcji sql, z których niektóre są podzielone na wiele wierszy. Próbowałem wczytać plik i spróbowałem uruchomić plik za pomocą ODP.NET ... jednak nie sądzę, aby funkcja ExecuteNonQuery była naprawdę zaprojektowana do tego.
Więc próbowałem użyć sqlplus poprzez tworzenie procesu ... jednak jeśli nie utworzyłem procesu z UseShellExecute ustawionym na true sqlplus, zawiesiłoby się i nigdy nie zakończył. Oto kod, który NIE DZIAŁA.
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus";
p.StartInfo.Arguments = string.Format("xx/xx@{0} @{1}", in_database, s);
p.StartInfo.CreateNoWindow = true;
bool started = p.Start();
p.WaitForExit();
WaitForExit nigdy nie zwraca .... Chyba że ustawię UseShellExecute na true. Efektem ubocznym UseShellExecute jest brak możliwości przechwycenia przekierowanych danych wyjściowych.