参数化插入查询错误

时间:2017-09-05 07:31:42

标签: c# oracle

当我尝试使用参数化查询插入时,我遇到了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();
  }
}

当我使用没有参数化查询时它没有任何错误,请帮我解决这个问题。感谢

编辑:我认为这个问题不是一个重复的问题,下面提供的答案对我有用。在这里,我使用了“@”符号,这是错误的主要原因。请重新考虑一下。感谢

1 个答案:

答案 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”对象添加到“参数”属性时),请不要在命名参数前面加冒号(:)

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