2017-09-05 71 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