C# ORA-01756:带引号的字符串未正确终止异常

C# ORA-01756:带引号的字符串未正确终止异常,c#,oracle,C#,Oracle,我使用下面的查询执行insert语句,但在标题上抛出异常。我试着调试这个查询,但不知道哪里出错了。我不想使用参数化查询 OracleCommand cmd = new OracleCommand("INSERT INTO AML_PERCENTAGE_COMPARATOR ( FIRSTNAME, MIDDLENAME, LASTNAME, WHOLENAME, PERCENTAGE ) VALUES ('" + ListOfAML[i].firstName + "','" + ListOfAM

我使用下面的查询执行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 + "')");
我不想使用参数化查询

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 + "')");
这是你的问题

您可以插入Athos、Aramis和Portos。但是,达达尼安出现了,你的陈述被打断了


使用参数绑定。

"D'Artagnan".Replace( "'", "''")
解决你的问题。我试着以它为例

正如我所说,单引号在SQL DBMS中有特殊的意义。如果您想在命令中使用它们作为

最好的方式来处理他们使用。此外,这种字符串连接也会受到攻击


您认为应该使用preparedstatement吗?所有列类型都是字符吗?字符串的值是多少?也许其中一个包括像奥康纳一样的
?顺便说一句,你应该经常使用。这种字符串连接是可以被攻击的。@SonerGönül是的,它包含(al-Mu'ayyad)当我实现上面的内容时,我得到了
ORA-01036:非法变量名/编号
@Lawrence Ops,对不起,那是我的错。我将
OracleCommand
OleDbCommand
混合使用。在
OracleCommand
中,您需要在命令中的参数名称前面使用
前缀。基于此更新了我的答案。你们也可以读这篇文章。