2017-09-05 54 views
0

我收到的時候我嘗試使用參數化查詢插入以下Oracle錯誤:參數插入查詢錯誤

ORA-01036:非法的變量名/編號

我的代碼是:

OracleTransaction myTrans; 
using (myTrans = myConnection.BeginTransaction()) 
{ 
    try 
    { 
    OracleCommand cmd = new OracleCommand("INSERT INTO TABLE_NAME(GKEY,FILE_NAME,CONTAINER_NO) VALUES (1,@file_name,@container_no)", myConnection); 
    cmd.Parameters.AddWithValue("@file_name", file_name); 
    cmd.Parameters.AddWithValue("@container_no", container_no); 
    cmd.Transaction = myTrans; 
    cmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
    myTrans.Rollback(); 
    } 
    finally 
    { 
    myTrans.Commit(); 
    } 
} 

當我使用沒有參數化查詢它工作沒有任何錯誤,請幫我解決這個問題。謝謝

編輯:我認爲這個問題不是一個重複的問題,下面提供的答案適用於我。這裏我使用了「@」符號,這是造成錯誤的主要原因。請重新考慮。謝謝

+0

@Jerodev Oracle不支持使用參數化查詢進行插入的綁定變量嗎? – imsome1

回答

4

我認爲這裏的問題可能與參數語法有關。嘗試使用:代替@

OracleCommand cmd = new OracleCommand("INSERT INTO TABLE_NAME(GKEY,FILE_NAME,CONTAINER_NO) VALUES (1,:file_name,:container_no)", myConnection); 
cmd.Parameters.AddWithValue("file_name", file_name); 
cmd.Parameters.AddWithValue("container_no", container_no); 

當通過CommandType.Text的OracleCommand調用的SQL語句中使用命名參數,你必須使用一個冒號(:)前面的參數名稱。然而,在存儲過程中,或者在你的代碼指的是命名參數時,其他地方(例如,添加的OracleParameter對象的參數屬性時),不要用冒號之前的命名參數(:)

https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters(v=vs.110).aspx

+0

非常感謝它的工作。 – imsome1