あの時の僕は、以下のようなコードでリターンコードを取得できる、そう信じていたんだ。
結果は、NULLだった。信じる者は救われない。
調べてみると、ストアドのParametersプロパティの「@RETURN_VALUE」というパラメータにセットされるとのこと。デザイナのプロパティウィンドウから辿ると、確かに作成されている。
そしてParametersが格納されている各ストアドのCommandオブジェクトは、QueriesTableAdapterクラスのCommandCollectionプロパティに格納されている。ということは、以下のようなコードでアクセスできる筈だ。あのときの僕はそう信じていたんだ。
結果、「procAdapter.」まで入力してIntelliSenseを確認するが、CommandCollectionが見あたらない。こいつ、protectedじゃねぇか!
他にPublicなインターフェイスも見あたらない。万事休すかと思いきや、以下の記事に解決策が。成る程、partialクラスか。
記事を参考に以下のようなソースを作成・使用した所、うまくいきました。
尚、細かい値チェック等は省略しています。
また、partialクラスを使用するので、.NET Framework 2.0以降でなければ使えません。
int引数版を外部から直接使用することはお薦めしません。CommandCollectionの格納順に依存してしまうし分かりにくいので。まぁEnum使えば分かりにくさは回避できますが。
ちなみにCommandCollectionの格納順は、自動生成される「○○DataSet.Designer.cs」で確認できます。
デザイナで表示されている順番ではありません!
これらの並び必ずしも一致しないのです。
以下に例を示します。
デザイナでは以下のようになっていますが
「○○DataSet.Designer.cs」の中身はこうです。
それぞれの並びは
- データセットデザイナ:ストアド名順
- ○○Designer.cs:ウィザードで追加した順
ちなみに、需要は無いでしょうが、CommandCollectionの格納順を変更することは可能です。
デザイナの表示順とCommandCollectionの格納順が異なることが気になって気になって夜も眠れない方々のために、方法を紹介します。
0 件のコメント:
コメントを投稿