2010-03-02 9 views
0

나는 오라클에서이 작동해야 PostgreSQL 및 에서 작동하는 공통 응용 프로그램을 구축했습니다.ODP.NET 및 매개 변수

그러나 매개 변수화 된 쿼리를 통해 레코드를 삽입 할 때 이상한 오류가 발생합니다.

내 서식이 쿼리는 다음과 같습니다

"(@ lm_id, @ lm_layer_name, @ lm_layer_file) layer_mapping 값으로 INSERT;"

Npgsql이 매개 변수 사용법을 문서화 한 것과 달리 오라클이 어떻게 사용되는 것을 선호하는지 알 수 없습니다. 나는 오직 : 1, : 2, : 3을 찾을 수있었습니다.

순차적 인 매개 변수를 사용하고 싶지 않습니다. 명명 된 방법으로 사용하고 싶습니다.

할 방법이 있습니까? 내가 뭐 잘못하고 있니?

감사

과 같이 ODP.NET과

답변

5

당신은 이름을 사용할 수있는 매개 변수 :

using (var cx=new OracleConnection(connString)){ 
    using(var cmd=cx.CreateCommand()){ 
     cmd.CommandText="Select * from foo_table where bar=:bar"; 
     cmd.BindByName=true; 
     cmd.Parameters.Add("bar",barValue); 
     ///... 
    } 
} 
+0

조쉬! 인서트는 어떨까요? 열 이름을 한정 할 필요는 없습니다. 실제 고통은 BindByName입니다. Npgsql은 그 변수를 설정할 필요가 없거나 필요하지 않습니다! –

+0

삽입의 경우 "INSERT INTO table_name 값 (: foo, : bar)"또는 "INSERT INTO table_name (foo, bar) 값 (: foo, : bar)"을 사용할 수 있습니다. 테이블 구조 미래의 변화. –

+0

고마워 : D Dind that BindByName! : P –

0

나는이 lib에 너무 https://github.com/pedro-muniz/ODPNetConnect/blob/master/ODPNetConnect.cs

매개 변수가있는 쓰기를하고 다음과 같이 읽을 수 있습니다 만들어진 :

ODPNetConnect odp = new ODPNetConnect(); 
if (!String.IsNullOrWhiteSpace(odp.ERROR)) 
{ 
    throw new Exception(odp.ERROR); 
} 

//Write: 
string sql = @"INSERT INTO TABLE (D1, D2, D3) VALUES (:D1, :D2, :D3)"; 

Dictionary<string, object> params = new Dictionary<string, object>(); 
params["D1"] = "D1"; 
params["D2"] = "D2"; 
params["D3"] = "D3"; 

int affectedRows = odp.ParameterizedWrite(sql, params); 

if (!String.IsNullOrWhiteSpace(odp.ERROR)) 
{ 
    throw new Exception(odp.ERROR); 
} 

//read 
string sql = @"SELECT * FROM TABLE WHERE D1 = :D1"; 

Dictionary<string, object> params = new Dictionary<string, object>(); 
params["D1"] = "D1"; 

DataTable dt = odp.ParameterizedRead(sql, params); 
if (!String.IsNullOrWhiteSpace(odp.ERROR)) 
{ 
    throw new Exception(odp.ERROR); 
} 

참고 : ODPN에서이 줄을 변경해야합니다. etConnect.cs를 사용하여 연결 문자열을 설정하십시오.

static private string devConnectionString = "SET YOUR DEV CONNECTION STRING"; 
static private string productionConnectionString = "SET YOUR PRODUCTION CONNECTION STRING"; 

123 환경을 dev 또는 prod로 변경해야합니다.

public OracleConnection GetConnection(string env = "dev", bool cacheOn = false)