- - PR -
SQL文に”(ダブルコーテーション)を入れられますか?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-11 15:46
今、C#でOracleに接続するプログラムを作っているのですが、
SQL文の中にどうしても”(ダブルコーテーション)が必要な状況です。 しかし、プログラムの中で\"と入力してSQL文を作っても、 作成されるSQL文で\"のままで正常に動作しません。 作成したいSQL文は SELECT * FROM "あいうえお" WHERE "かき" = '02487' の様な内容で、プログラムでは string strSQL = "SELECT * FROM \"あいうえお\" WHERE \"かき\" = '02487'"; です。 何か良い解決方法は無いでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2004-10-11 17:03
提示されている内容で実行していますが、↑これ、「SQL文では¥"のまま」というのを、どうやって確認しましたか? 訂正:しています → できています _________________ Microsoft MVP for Visual Developer - ASP/ASP.NET on 2004 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-10-11 17:04 ] | ||||
|
投稿日時: 2004-10-11 17:52
Jitta様
早速の返答ありがとうございます。 確認した方法ですが、 OleDbConnectionをOpen時に自動変数の値から確認しました。 正常に動作すると言うことは、 SQL文以前の接続などの問題の可能性も在ると言う事でしょうか | ||||
|
投稿日時: 2004-10-11 22:11
?? 先の提示では、宣言時に初期化していますよね。そういう風にしているんですよね?SQL云々ではなく、C#の文字列宣言で、¥マークがエスケープシーケンスとして働いていない、ということではないのですか? #もっとも、特定のクラスプロパティだけ扱いが違う、という話は聞いたことも #読んだこともないけど _________________ | ||||
|
投稿日時: 2004-10-12 09:43
エスケープシーケンスとして機能していない場合は、構文エラーでコンパイルもできないと思います。データベース側でプロファイラを走らせて、実際に実行されるクエリ文字列を確認するのが、もっとも近道かもしれません。 | ||||
|
投稿日時: 2004-10-12 13:09
最初の投稿の例で例えばテーブル名は「あいうえお」「"あいうえお"」どちらでしょうか 後者なら、Oracleがダブルコーテーションを普通の文字として認識するのか、という 問題があります。Oracleは知りませんがSQLServerでは SELECT FROM ["あいうえお"] WHERE ["かき"] = '02487' のようにしないといけません。 | ||||
|
投稿日時: 2004-10-12 13:42
SQL-92 では標準外識別子をダブルクォーテーションでくくることになっています。
もちろん SQL Server でも [] を使わずに "" で識別子をくくることができます。 (QUOTED_IDENTIFIER が ON の場合) | ||||
|
投稿日時: 2004-10-12 20:56
わはは。厳しいなぁ^o^; え〜っと、『もっとも、特定のクラスプロパティだけ扱いが違う、という話は聞いたことも読んだこともないけど』、です。私も構文エラーでコンパイルできない、と思いますが、何か例外があったりするのかなぁ?とか。有ったら嫌だけど。 2004-10-11 15:46分には、『string strSQL = "SELECT * FROM ¥"あいうえお¥" WHERE ¥"かき¥" = '02487'";』と書いてありますが、これが、 string preparedSQL = "SELECT * FROM @ WHERE @ = @"; となっていて、パラメータとして『¥"あいうえお¥"』と入力していると、円マークがそのまま表示されるかな?とか、考えてみました。 または、ユーザ入力が『¥"あいうえお¥"』で、 string strSQL = "SELECT * FROM " + input1 + " WHERE " + input2 + " = " + input3; となっていると、ユーザ入力の部分に関しては、『¥』が続く『"』のエスケープシーケンスとみなされないかもしれません。“みなされない”というか、「『¥¥¥"』という文字列として扱われている」のでは?とか。 ハードコーディングしてOracleに理解してもらっているコードがあるので、ここに投稿するときに元の書き方から変えている、と疑っています。 #『¥』は掲示板の表示上問題があるので、全角にしています |