【问题标题】:ORA-01756:quoted string not properly terminated ExceptionORA-01756: 引用的字符串未正确终止异常
【发布时间】:2015-03-23 12:11:02
【问题描述】:

我正在使用以下查询执行插入语句,但在标题上引发异常。我试图调试查询,但无法弄清楚哪里出错了。我不想使用参数化查询。

OracleCommand cmd = new OracleCommand("INSERT INTO AML_PERCENTAGE_COMPARATOR ( FIRSTNAME, MIDDLENAME, LASTNAME, WHOLENAME, PERCENTAGE ) VALUES ('" + ListOfAML[i].firstName + "','" + ListOfAML[i].middleName + "','" + ListOfAML[i].lastName + "','" + ListOfAML[i].wholeName + "','" + compare + "')");

【问题讨论】:

  • 你认为你应该使用preparedstatement吗?
  • 所有列类型都是字符吗?你的弦有什么价值?也许其中之一包括'O'Conner?顺便说一句,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
  • @SonerGönül 是的,它包含 (al-Mu'ayyad)

标签: c# oracle


【解决方案1】:

nvoigt already explained 你的问题。我试着举个例子;

正如我所说,单引号在 SQL DBMS 中具有特殊的含义。如果你想在你的命令中使用它们作为string literalyou need to double them

使用parameterized queries 处理它们的最佳方式。这种字符串连接也对SQL Injection 攻击开放。

using(var con = OracleConnection(conString))
using(var cmd = con.CreateCommand())
{
   cmd.CommandText = "INSERT INTO AML_PERCENTAGE_COMPARATOR(FIRSTNAME, MIDDLENAME, LASTNAME, WHOLENAME, PERCENTAGE )
                      VALUES(:firstname, :middlename, :lastname, :wholeName, :compare)";
   cmd.Parameters.AddWithValue("firstname", ListOfAML[i].firstName);
   cmd.Parameters.AddWithValue("middlename", ListOfAML[i].middleName);
   cmd.Parameters.AddWithValue("lastname", ListOfAML[i].lastName);
   cmd.Parameters.AddWithValue("wholeName", ListOfAML[i].wholeName);
   cmd.Parameters.AddWithValue("compare", compare);

   con.Open();
   cmd.ExecuteNonQuery();
}

【讨论】:

  • 当我在上面实现时,我得到ORA-01036: illegal variable name/number
  • @Lawrence Ops,对不起,那是我的错。我将OracleCommandOleDbCommand 混合在一起。在OracleCommand 中,您需要在命令中的参数名称前使用: 前缀。基于此更新了我的答案。您也可以阅读Using Parameters 文章。
【解决方案2】:

我不想使用参数化查询。

嗯,这就是你的问题。

您可以插入 Athos、Aramis 和 Portos。但随后,达达尼昂出现了,你的说法就中断了。

使用参数绑定。

【讨论】:

    【解决方案3】:

    如果 ' 是问题,那么用 '' 替换它可能会有所帮助

    "D'Artagnan".Replace( "'", "''")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2020-12-27
      相关资源
      最近更新 更多