ORA-01756:引用字符串未正确终止异常

时间:2015-03-23 12:11:02

标签: c# oracle

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

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 + "')");

3 个答案:

答案 0 :(得分:3)

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();
}

答案 1 :(得分:2)

  

我不想使用参数化查询。

嗯,那是你的问题。

您可以插入Athos,Aramis和Portos。但是,D'Artagnan出现了,你的陈述破裂了。

使用参数绑定。

答案 2 :(得分:0)

如果'是问题,然后用''替换它。可能有帮助,例如

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