2017-09-27 5 views
0

でのSQLステートメントで右括弧が欠落すると、ORA-00907:上記のエラーを取得して、以下のクエリを実行している場合はC#の

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

sReceipts[0]値が「トム」(アポストロフィ付き)ですがエラーを与えます

ただし、sReceipts [0] = 'Ann' の場合、エラーは発生しません。

String.Formatで解決しようとしましたが、できませんでした。 最高のアプローチは何ですか?

答えて

-1

アポストロフィを2つのアポストロフィで置き換えた正規表現にsReceipts [0]をラップします。

Escaping single quote

Oracle regular expressions

+1

いいえ、手動でエスケープするのは*極端にエラーが発生しやすいです。パラメータ化されたクエリは、ここでの方法です。 –

4

あなたは、以下のようにパラメータ化クエリを使用する必要があります:あなたは同等のOracleパラメータ収集のためのマイクロソフトのクラスとOracleParameterCollectionを使用している場合

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])); 

MSDN OracleCommand.Parameters Propertyを参照してください。

関連する問題