2014-10-07 8 views
0

我返工遺留代碼,並來到這個查詢:ORA-01036改寫一個Oracle插入命令

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

其中一期工程,但我想這可憎改寫成paramerterized格式,obious原因。

現在,這是我迄今取得的進展:

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的,我懷疑這是在此位置:

'ID" + ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString() - >'ID' || :Id_Bew

在原來的SQL查詢字符串「ID」被串連帶有一個從會話變量中拉出的數字ID。我的懷疑是,我在參數化查詢中將它錯誤地串聯起來,並且破壞了語法。

問題是:如何解決此錯誤並將此插入命令轉換爲正確的格式?

回答

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 2014-10-07 13:07:32