7

SQL スクリプトの実行を制御する自動化を開発しています。スクリプトはSQL*PLUSを介して実行され、 PL/SQL呼び出しが含まれています (したがって、 ODP.NETを介してスクリプトを実行することはできません)。

SQL*PLUSへの.NETインターフェイスがあるかどうか疑問に思っていましたか? もしそうなら、誰かがそれを使用しましたか?

4

2 に答える 2

3

すべてを機能させる方法を理解するのにしばらく時間がかかったので、調査の結果は次のとおりです。

c# コード:

ORAUtils.execString(@"c:\tmp.sql 'Oracle sucks!'");
...

using System.Diagnostics; -- where the Process stuff lives
...
public static int execString(string scriptFileName)
{
 ...
 ProcessStartInfo processInfo = new ProcessStartInfo();
 processInfo.FileName = "sqlplus.exe";
 processInfo.Arguments = "user/pwd@db @" + scriptFileName;
 ...
 Process process = Process.Start(processInfo); // typo in code above small p instead of caps helps
 ...

結果のコマンドライン:

sqlplus.exe user/pwd@db @c:\tmp.sql 'オラクルはひどい!'

sqlplus /? と入力します。dosプロンプトで次の構文を取得します。

sqlplus

ここで logon=user/pwd@db and start=@c:\tmp.sql 'Oracle は最低!'

SQL ファイルを開始し、パラメータ文字列を渡します。

tmp.sql の最初の行:

プロンプト &1

パラメータ文字列を表示します。

どうも

于 2009-03-20T17:46:54.267 に答える
3

次のコードを使用して、C# で実行できます。

public int execString(string scriptFileName)
{
   int exitCode;
   ProcessStartInfo processInfo;
   Process process;
   int timeout = 5000;

   processInfo = new ProcessStartInfo("sqlplus.exe", "@" + scriptFileName);
   processInfo.CreateNoWindow = true;
   processInfo.UseShellExecute = false;
   process = process.Start(ProcessInfo);
   process.WaitForExit(timeout);
   exitCode = process.ExitCode;
   process.Close();

   return exitCode;
}

VB.NET では、フレームワークで同じ API を使用してまったく同じことを実現できますが、VB.NET の構文についてはよくわかりません。

また、SQL/Plus DLL を検査して、それらから何かを取得できるかどうかを確認することもできます。しかし、それはより高速な (パフォーマンス面での) アプローチであるべきですが、私が提案しているものを使用するよりもはるかに複雑になると思います。

于 2009-03-18T11:02:06.213 に答える