【问题标题】:parameterized insert query error [duplicate]参数化插入查询错误[重复]
【发布时间】:2017-09-05 16:11:36
【问题描述】:

当我尝试使用参数化查询插入时出现以下 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();
  }
}

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

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

【问题讨论】:

  • @Jerodev Oracle 不支持使用参数化查询进行插入绑定变量?

标签: c# oracle


【解决方案1】:

我认为这里的问题可能与参数语法有关。尝试使用: 而不是@

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

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

【讨论】:

  • 非常感谢它的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多