我正在开发一些自动化来控制 SQL 脚本的执行。这些脚本通过SQL*PLUS运行,并在其中包含PL/SQL调用(因此我无法通过ODP.NET运行它们)。
我想知道SQL*PLUS是否有.NET接口?如果有,有人用过吗?
我正在开发一些自动化来控制 SQL 脚本的执行。这些脚本通过SQL*PLUS运行,并在其中包含PL/SQL调用(因此我无法通过ODP.NET运行它们)。
我想知道SQL*PLUS是否有.NET接口?如果有,有人用过吗?
我花了一段时间才弄清楚如何让它全部工作,所以这是我的调查结果:
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 /? 在 dos 提示符下,您将获得以下语法:
sqlplus
这里 login=user/pwd@db 和 start=@c:\tmp.sql 'Oracle 糟透了!
它将启动 sql 文件并将参数字符串传递给它。
tmp.sql 第一行:
提示 &1
将显示参数字符串。
谢谢
您可以使用以下代码在 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,看看是否可以从中获得一些东西。但我认为,即使它应该是一种更快(性能方面)的方法,它也会比使用我建议的方法复杂得多。