나는 (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 개발자
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