我有一個連接到數據庫的控制檯應用程序(使用Oracle.ManagedDataAccess
),然後嘗試執行位於本地硬盤驅動器上的一堆SQL*PLUS
腳本。是否可以使用ODP.NET(Oracle.ManagedDataAccess)執行SQLPLUS腳本?
不幸的是,儘管我的應用程序適用於簡單的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 Developer中執行\我的應用程序,而不SQL*PLUS
SELECT ID FROM data.SOME_TABLE WHERE ROWNUM < 100
錯誤:
ORA-00900: invalid SQL statement at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
我缺少什麼?這甚至有可能嗎?
您可能需要參考客戶端的其他庫。看看[sqlserver的方式](http://stackoverflow.com/questions/1449646/how-can-i-execute-a-sql-from-c) –
它應該工作,我試着它的代碼工作。在代碼中嘗試使用相同的sql語句,而不是使用「腳本」文件,如果它正在工作,它應該與該「腳本」文件一起工作。 – imsome1
@ imsome1這是令人鼓舞的,它適用於你。因此,如果我刪除腳本元素並傳遞字符串,請改爲:「DEFINE CODE_PATH = C:\\ Automation \ r \ n @ \」&& CODE_PATH \\ TEST.sql \「」我仍然收到錯誤 – Freddie2025