当我尝试使用参数化查询插入时,我遇到了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 :(得分: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”对象添加到“参数”属性时),请不要在命名参数前面加冒号(:)