none
「指定されたメソッドはサポートされていません」エラー RRS feed

  • 質問

  • お世話になってます。

    現在、oracle接続で、キャスト変換しようとしています。以下に示します。

    this.txtNm.Text = (string)dr.GetString(1);//「名前」を表示(OK項目)
    this.txtAge.Text = (string)dr.GetInt16(2).ToString();//「年齢」を表示(NG項目)

    この「NG項目」には、

    'System.NotSupportedException' のハンドルされていない例外が system.data.oracleclient.dll で発生しました。

    追加情報 : 指定されたメソッドはサポートされていません。

    というエラーが出ます。
    一つ目の項目はできますがやはりキャスト変換に問題があるのでしょうか?よろしくお願いします。

    2006年9月14日 3:27

すべての返信

  • GetDataTypeNameでデータ型を調べてみたらどうでしょう? たぶん、Decimalとかになってるんじゃないかな?

    データ プロバイダのデータ型から .NET Framework のデータ型への変換
    http://msdn2.microsoft.com/ja-jp/library/4e5xt97a.aspx

    2006年9月14日 3:46
    モデレータ
  • キャストを疑われていますが、GetString() も ToString() も戻り値は string 型なので、string へのキャストは意味がなく、このキャストが原因でエラーになることはないです。実際、コンパイル後にはこのキャストはなくなります。

    今回の場合はエラーメッセージの通りで、OracleDataReader では GetInt16() をサポートしていません。同様に、GetBoolean() 等、オラクルではサポートされないメソッドは他にいくつかあります。

    このことがヘルプに少しも書かれていない、というか使えそうに書かれているのは問題ですね...。

    GetInt32 の方であれば機能しますが、OracleDataReader を使用するときには、基本的に GetOracle で始まるメソッドを使うといいと思います。今回の場合、decimal を返す GetOracleNumber(~).Value を使用されてはと思います。

    this.txtAge.Text = dr.GetOracleNumber(2).Value.ToString();

    項目に名前がある場合は、名前で値を取得する方がわかりやすいのではと思います。

    this.txtAge.Text = dr.GetOracleNumber(dr.GetOrdinal("年齢")).Value.ToString("##0");

    2006年9月14日 14:52
  • >trapemiyaさん

    ありがとうございます。

    それぞれサポートされているものとそうでないものがあるのですね・・・

    >TH01さん

    ありがとうございます。できました。データ型の特徴をそれぞれ覚える必要がありますね、要勉強です…。

    2006年9月15日 2:19