- - PR -
Oracleとシングルコーテーション
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-02 17:33
いつも参考にしています。
Oracleでシングルコーテーション付きのデータを書き込む場合 「']を「''」で変換すれば書き込みできますが、 既に、VB.NETで画面内容に応じてSQL文を作成し 以下のようなSQLができたものを、共通的な処理で 以下のように変えることができないだろうか?? って思っています。 VBで関数などを作成しようと思いましたが 思いつきません。 何かいい案がありませんでしょうか? 前 INSERT INTO AAA(CD,NAME) VALUES(111,'aaa'aa') 後 INSERT INTO AAA(CD,NAME) VALUES(111,'aaa''aa') ちなみに、画面項目から「'」を入力不可にはできません。 SQL文作成時に,VBの関数でReplaceで変換もOkですが 量は多すぎて対応しきれそうにありません。 どうか、知恵をお貸し下さい。。。 | ||||
|
投稿日時: 2007-11-02 17:42
私は.NETは概要しか知らないのですが、
Javaだと下記のようなSQLに対して、 後から「?」に値をセットする事が出来るクラスが用意されています。 勿論、セットした値は適切な形式に変換されます。
似たような事が.NETでも恐らく出来るはずです。 | ||||
|
投稿日時: 2007-11-02 17:48
takuさんありがとうございます。
Vb.NETで可能かどうかはまだ確認していませんが その場合、1つ1つを修正ですよね??? でも今製造してしまっている分を 書き換えるのはかなり時間がかかってしまうんです。 なので、共通的になんとかできないかと思ってます。 | ||||
|
投稿日時: 2007-11-02 18:01
taku氏がおっしゃる通り、パラメータでやるしかないと思います。
例えば以下のようなSQL文があったとして INSERT INTO AAA VALUES('111','222') これをSQL文が全て作成されてから INSERT INTO AAA VALUES('111'',''222') /* 1列に[111','222]を挿入したい。 */ と変換するのか INSERT INTO AAA VALUES('111','222') /* 2列に[111]と[222]を挿入したい。 */ と変換するのか判断できないと思います。 | ||||
|
投稿日時: 2007-11-03 11:33
元々の作り方が悪いので、手戻りは仕方がないと思います。
値をバインドするSQLにするにしても、 連結する値を関数で処理してから渡すにしても、 何かしらの改造は必要でしょう。 「面倒だから楽に解決できる、魔法のような解決法」なんてものは存在しません。 そもそも入力値をそのままSQLに連結するのは考慮漏れというよりも、 今のご時世、単純なバグです。 | ||||
|
投稿日時: 2007-11-04 14:05
複雑なケースとして、 "INSERT INTO AAA(CD,NAME) VALUES(111,'aaa','aa')" みたいなことを想定すると、つぎのやりかたが考えられます。 まず、"AAA(CD,NAME)" の部分を解析して、列数が2個であることを判別する。 つぎに、"VALUES(111,'aaa','aa')" の中の括弧の中をとりあえずシングルクォーテーションは無視して、カンマだけで2つに区切ることができるパターンをしらみつぶしに探す。この例の場合はつぎの2パターンがあります。 (a) "111" と "'aaa','aa'" (b) "111,'aaa'" と "'aa'" しかし(b)はおかしい。となると(a)だけが残るので、"'aaa','aa'" をエンコードして "'aaa'',''aa'" にします。 作ろうとしましたが、順列や組み合わせを生成するのがめんどくさくて、挫折しました。実行時に1つのパターンに特定できないときは、問い合わせの InputBox を画面に出せば良いでしょう。 (本気でそんなことをお勧めしているわけではありません。一度SQL文になったものを後からエンコードし直すことは厳密には無理です。) -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2007-11-04 14:09
ちなみに、カンマ(",")を入力不可にできれば、原理的には対処できますね。(これもお勧めするわけではありません。あくまでもそういう考えはできる、というだけの話です。) -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2007-11-05 10:02
でも、このシステムっていまどきこんな実装をやっていると、
セキュリティは大丈夫なのかと疑ってしまいますよね。 最低限、ログイン部分の実装は直さないと駄目っぽいですね。 [ メッセージ編集済み 編集者: taku 編集日時 2007-11-05 10:02 ] |
1