【发布时间】:2017-08-07 04:03:55
【问题描述】:
我有一个控制台应用程序连接到数据库(使用Oracle.ManagedDataAccess),然后尝试执行位于我本地硬盘上的一堆SQL*PLUS 脚本。
不幸的是,虽然我的应用适用于简单的 SQL 语句 (SELECTS),但它似乎不适用于 SQL*PLUS。
代码:
var script = File.ReadAllText("C:\\Automation\\script.sql");
using (var objConn = new OracleConnection(_connectionString))
{
OracleCommand objCmd = new OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = script;
objCmd.CommandType = CommandType.Text;
try
{
objConn.Open();
objCmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Console.WriteLine("Exception: {0}", ex.ToString());
}
finally
{
objConn.Close();
}
}
Script.sql - 在 SQL Developer 中正确执行
DEFINE CODE_PATH = C:\Automation
@"&&CODE_PATH\Test.sql"
Test.sql - 在没有SQL*PLUS 的情况下在 SQL Developer\我的应用程序中正确执行
SELECT ID FROM data.SOME_TABLE WHERE ROWNUM < 100
错误:
ORA-00900: invalid SQL statement at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
我错过了什么?这甚至可能吗?
【问题讨论】:
-
你可能需要参考一些其他的客户端库。看看sqlserver way
-
它应该可以工作,我尝试了它工作的代码。在代码中尝试相同的 sql 语句,而不是使用“脚本”文件,如果它正在工作,它也应该与那个“脚本”文件一起工作。
-
@imsome1 令人鼓舞的是它对您有用。因此,如果我删除脚本元素并改为传递一个字符串: "DEFINE CODE_PATH = C:\\Automation\r\n@\"&&CODE_PATH\\TEST.sql\"" 我仍然会收到错误
-
好的,使用 Console.WriteLine(script) 打印“script”值;并检查输出
-
打印到控制台看起来没问题。即使我通过:“@C:\\Automation\\test.sql”我仍然得到错误