Есть ли .Net интерфейс для Oracle SQLPLUS? - PullRequest
6 голосов
/ 18 марта 2009

Я разрабатываю некоторую автоматизацию для управления выполнением сценариев SQL. Сценарии выполняются через SQL * PLUS и содержат в себе PL / SQL вызовы (поэтому я не могу выполнить их через ODP.NET ).

Мне было интересно, был ли .NET интерфейс для SQL * PLUS ? Если так, кто-нибудь использовал это?

Ответы [ 2 ]

3 голосов
/ 18 марта 2009

Вы можете сделать это в 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.

Вы также можете попробовать проверить DLL-библиотеки SQL / Plus и посмотреть, сможете ли вы извлечь из них что-то полезное. Но я думаю, что даже если это будет более быстрый (с точки зрения производительности) подход, он будет намного сложнее, чем использование того, что я предлагаю.

2 голосов
/ 20 марта 2009

Мне понадобилось время, чтобы понять, как заставить все это работать, поэтому вот результат моих исследований:

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 'Oracle сосет!'

Тип sqlplus /? в командной строке, и вы получите синтаксис:

sqlplus

Здесь logon = user / pwd @ db и start = @ c: \ tmp.sql 'Oracle сосет!'

Он запустит файл sql и передаст ему строку параметров.

tmp.sql первая строка:

подсказка & 1

отобразит строку параметров.

Thx

...