C# ORA-00907:在C中缺少带有SQL语句的右括号#

C# ORA-00907:在C中缺少带有SQL语句的右括号#,c#,oracle,C#,Oracle,当运行下面的查询获取上面的错误时 String sql = "((NAME= '" + sReceipts[0] + "' ) OR (SECTION IN ('RECEIPT', 'PROJECT') AND NAME IS NULL))"; sReceipts[0]值为'Tom's'(带撇号)给出错误 但是如果sReceipts[0]=“Ann”则不会发生错误 试图用String.Format解决问题,但无法解决。 请告诉我最好的方法是什么?我将把sReceipts[0]封装在一个正则表

当运行下面的查询获取上面的错误时

String sql = "((NAME= '" + sReceipts[0] + "' ) OR (SECTION IN ('RECEIPT', 'PROJECT') AND NAME IS NULL))"; 
sReceipts[0]
值为'Tom's'(带撇号)给出错误

但是如果sReceipts[0]=“Ann”则不会发生错误

试图用String.Format解决问题,但无法解决。
请告诉我最好的方法是什么?

我将把sReceipts[0]封装在一个正则表达式中,用两个撇号替换撇号


我会将sReceipts[0]封装在正则表达式中,用两个撇号替换撇号


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

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类和等效的Oracle参数集合。

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

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类和等效的Oracle参数集合。

否,手动转义极易出错。参数化查询是前进的方向。不,手动转义非常容易出错。参数化查询是前进的方向。