Oracle SQLPLUS 是不是有 .Net 接口?

Posted

技术标签:

【中文标题】Oracle SQLPLUS 是不是有 .Net 接口?【英文标题】:Is there a .Net interface to Oracle SQLPLUS?Oracle SQLPLUS 是否有 .Net 接口? 【发布时间】:2009-03-18 10:03:25 【问题描述】:

我正在开发一些自动化来控制 SQL 脚本的执行。脚本通过 SQL*PLUS 运行并包含 PL/SQL 调用(因此我无法通过 ODP.NET 运行它们) .

我想知道 SQL*PLUS 是否有 .NET 接口?如果有,有人用过吗?

【问题讨论】:

【参考方案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,看看是否可以从中得到一些东西。但我认为即使它应该是一种更快(性能方面)的方法,它也会比使用我建议的方法复杂得多。

【讨论】:

我已经尝试过了,问题(我可以看到你也遇到过)是 sqlplus 不会从 WaitForExit 退出 - 除非你用 shell 执行它。 ...脚本已经有一个出口;最后...... WaitForExit 仍然永远挂起。 我删除了最后一条评论以输入正确的信息。为了在脚本运行后返回 WaitForExit() 并让 sqlplus 退出,您必须在要运行的脚本的末尾附加一个正斜杠 (/),然后将“EXIT”附加到您要运行的脚本的末尾。【参考方案2】:

我花了一段时间才弄清楚如何让它全部工作,所以这是我的调查结果:

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

这里 logon=user/pwd@db 和 start=@c:\tmp.sql 'Oracle 糟透了!'

它将启动sql文件并将参数字符串传递给它。

tmp.sql 第一行:

提示 &1

将显示参数字符串。

谢谢

【讨论】:

以上是关于Oracle SQLPLUS 是不是有 .Net 接口?的主要内容,如果未能解决你的问题,请参考以下文章

SQLPLUS能连接oracle10g,PLSQL也能连,但网页程序却报错ORA-12154: TNS: 无法解析指定的连接标识符

Oracle sqlplus 设置

oracle 11g R2,运行SQLPlus 出现ORA-12560 TNS:协议适配器错误, 我该怎么办?

oracle 用Sqlplus连接的时候中文出现乱码

oracle 客户端 ora12560tns协议适配器错误,为啥呢?

oracle建表