2014-10-07 2 views
0

를 삽입 재 작성 후.ORA-01036 오라클 내가 레거시 코드를 재 작업이 쿼리에 와서하고 명령

sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE (ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " + 
         "VALUES (:Id_Bew, TO_DATE(':Datum', 'DD.MM.YYYY HH24:MI:SS'), 2, TO_DATE(':BewAm', 'DD.MM.YYYY'), 'ID' || :Id_Bew, TO_DATE(':Datum', 'DD.MM.YYYY HH24:MI:SS'))"; 
         sqlDS.InsertParameters.Add("Id_Bew", ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString()); 
         sqlDS.InsertParameters.Add("Datum", _datum); 
         sqlDS.InsertParameters.Add("BewAm", lbl_bew.Text); 

이 문제의 테이블 :

지금이 지금까지 내 진행입니다

COLUMN  | TYPE 
----------------------- 
ID   | NUMBER 
DATUM  | DATE 
/* Columns | ommited */ 
ID_STATE | NUMBER 
G_AM  | DATE 
G_VON  | CHAR(10 BYTE) 
DATUM_BEW | DATE 

변수가 아직 고정 된 스키마에 따라, 그래서 그들은 독일어, 결코 마음에 선언 된 이 경우에. 문제는이 새로운 코드는 이제 던졌습니다, 인 ORA-01036는 I가이 위치에 있다고 생각 :

'ID" + ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString() - 문자열 "ID가"concatinated되어 원래의 SQL 쿼리에서>'ID' || :Id_Bew

세션 변수에서 숫자 ID를 가져옵니다. 내 의심, 내가 paramerterized 쿼리에서 잘못된 방식으로 concatinated 구문을 엉망입니다.

질문 :이 오류를 해결하고이 삽입 명령을 적절한 형식으로 가져 오려면 어떻게해야합니까?

답변

1

바인딩 변수 작은 따옴표로 묶지 않고 정의해야합니다. 당신이 바인드 매개 변수를 추가하려고 시도 할 때

':bind_variable' ---> 잘못된가 (대신에 일반 문자열로 처리됩니다)
:bind_variable ---> 오른쪽

그래서, 그것은 던졌다 ORA-01036 : 불법 변수 이름/번호

sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE (ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " + 
          "VALUES (:Id_Bew, TO_DATE(:Datum, 'DD.MM.YYYY HH24:MI:SS'), 2, TO_DATE(:BewAm, 'DD.MM.YYYY'), 'ID' || :Id_Bew, TO_DATE(:Datum, 'DD.MM.YYYY HH24:MI:SS'))"; 
          sqlDS.InsertParameters.Add("Id_Bew", ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString()); 
          sqlDS.InsertParameters.Add("Datum", _datum); 
          sqlDS.InsertParameters.Add("BewAm", lbl_bew.Text); 
+0

감사합니다. 매력처럼 작동합니다. – Marco