ORA-00907:在C#中使用SQL语句缺少右括号

时间:2017-09-27 11:34:55

标签: c# oracle

运行以下查询时出现上述错误,

String sql = "((NAME= '" + sReceipts[0] + "' ) OR (SECTION IN ('RECEIPT', 'PROJECT') AND NAME IS NULL))"; 

sReceipts[0]值是'Tom''(带有 APOSTROPHE )给出错误

但是如果sReceipts [0] ='Ann'没有错误发生。

尝试用String.Format解决,但我做不到。 请问最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

您应该使用参数化查询,如下所示:

OracleCommand oraCommand = new OracleCommand("SELECT YourColumn FROM 
YourTable WHERE ((NAME= :receiptName ) OR (SECTION IN ('RECEIPT', 'PROJECT') AND NAME IS NULL))", db);
oraCommand.Parameters.Add(new OracleParameter("recieptName", sReceipts[0]));

如果您使用的是Microsoft类,请参阅MSDN OracleCommand.Parameters Property,并使用OracleParameterCollection获取等效的Oracle参数集。

答案 1 :(得分:-2)

我会将sReceipts [0]包装在一个用两个撇号替换撇号的正则表达式中。

Escaping single quote

Oracle regular expressions