この質問にはすでに回答されていると思いますが、検索ツールを使用して回答を見つけることができませんでした。
c#を使用して.sqlファイルを実行したい。sqlファイルには複数のsqlステートメントが含まれており、その一部は複数の行に分かれています。私はファイルを読み取ってODP.NETを使用してファイルを実行しようとしましたが、ExecuteNonQueryは実際にこれを行うように設計されているとは思いません。
したがって、プロセスの生成を介してsqlplusを使用しようとしましたが、UseShellExecuteをtrueに設定してプロセスを生成しない限り、sqlplusはハングして終了しません。動作しないコードは次のとおりです。
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は決して戻りません.... UseShellExecuteをtrueに設定しない限り。UseShellExecuteの副作用は、リダイレクトされた出力をキャプチャできないことです。