C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 93 を表示中)
■55753 / )  Re[3]: プロシージャの戻り値がnullの時
□投稿者/ ペンギン (2回)-(2010/12/13(Mon) 13:59:40)
皆様ご回答ありがとうございます。

>ここで言うオブジェクトというのはDataSetですか?
ここで言うオブジェクトとは
protected OracleDataAdapter DA;
のように宣言した、OracleDataAdapter型のDAというオブジェクトのことです。

>どのように処理を行っていますか?



1)下記のSetReturn関数を実行して、Oracle内部に定義されたプロシージャの
 戻り値をハッシュに格納します。
2)下記のGetRetern関数を実行してハッシュ内にある戻り値を取得します。

3)取得した値に対し、toStringメソッドでString型に変換すると、nullのデータが文字列"null"になります。

-------------------------------------------------------
 protected ArrayList ARR_PRM = null;
 protected Hashtable HASH_RET = null;

 public override void SetReturn(IDbDataAdapter DA) {
    for (Int32 i = 0; i < ARR_PRM.Count; i++) {
     Param tmpPrm = (Param)ARR_PRM[i];
   HASH_RET.Add(tmpPrm.Name,((OracleDataAdapter)DA).SelectCommand.Parameters[i].Value);
   }
 }

 public override System.Object GetRetern(String key) {
 if (!HASH_RET.Contains(key)) {
 return null;
 }
 return HASH_RET[key];
 }
-------------------------------------------------------

>作成されたオブジェクトはこちらもDataSetですか?

作成されたオブジェクトは、DataSetではなく、最初の質問で答えたDAというオブジェクトのことです。
DAをVisualStudioのクイックウォッチ機能で確認すると、Valueの値が{null}となっています。
また、直下のbaseに"NULLデータの処理が無効です"というエラーメッセージが表示されています。

>Value値というのはどのように取得していますか?

2)上記GetReternを呼び出し、取得しています。

ご紹介していただいた、DataRow.IsNull(項目名)ですが、上記のようなソースでの使用方法が
よくわからないので教えていただけないでしょうか。

>NULLが発生するフィールドが明確なら、SQLプロシジャ側で変換して渡す方法もあるかと思います。
たくさんあるので今回はC#側の対応をします。

今回のようにOracleDataAdapter型のオブジェクトを使用してデータ取得してくる際は、
戻り値がnullにならないようにPL/SQL側で制御を入れなければならないのでしょうか?

よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -