読者です 読者をやめる 読者になる 読者になる

替え玉バリカタでお願いします

お仕事と、お仕事そうでお仕事じゃない、少しお仕事な備忘など。

TableAdapterで動的SQLを発行する

C#

やりたいこと

Enumで定義された区分値をINでゴッソリと取りたい。
デザイナでINを@付きなパラメータに指定できないので、なんか楽できないかと。

1.TableAdapterを作る

特に変わらず、通常の手順で作ります。

2.INを受け付けたいTableAdapterのメソッドを作る

通常のFill()やGetData()を作るのと同じ。ただしWHERE句は無しで作ります。

3.INを受け付けたいメソッドのSQLに目印となる文字列を入れておく(/*IN*/とする)

上記で作ったメソッドのSQL末尾(WHERE句が入りそうなところ)に、目印となる文字列を入れます。
この文字列を置換するわけです。

4.自動生成コードをいじってCommandTextを置換する実装を入れる

「XXXDataSet.Designer.cs」から、自動生成コードからINを受け付けたいメソッドを探してコメントアウトします。
コメントアウトしたコードの代わりに、別途csファイルを作りCommandTextを置換する実装を入れます。
デバッグ時は「[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]」をコメントアウトしておくことを忘れずに。

注意点

そもそもEnumで定義したものだけINに突っ込みたかったので、画面などから文字列を直接入れられるケースは想定してません。
自由な文字列がINに指定される場合を想定するならば、エスケープするなどしないとマズいです。

広告を非表示にする