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参数集合。否,手动转义极易出错。参数化查询是前进的方向。不,手动转义非常容易出错。参数化查询是前进的方向。