使用以下查询执行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 + "')");
答案 0 :(得分:3)
nvoigt already explained你的问题。我试着把它作为一个例子;
正如我所说,单引号在SQL DBMS中具有特殊含义。如果您想在string literal,you 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( "'", "''")