連載
» 2005年01月27日 00時00分 公開

ODP.NETのデータアクセス・チューニングODP.NETファーストステップ(3)(4/4 ページ)

[大田浩,日本オラクル]
前のページへ 1|2|3|4       

非接続型でのデータアクセスの注意点

 非接続型でのデータアクセスは、Datasetオブジェクトを使用して結果セットを取得します。その際に、次のOracleデータ型は関連する.NET型に変換される際にデータが失われる可能性があります。これを防ぐために、ODP.NETのOracleDataAdapterでは安全な型マッピング機能が提供されています。

  • NUMBER
  • DATE
  • TimeStamp(すべてのTimeStampオブジェクトを意味する)
  • INTERVAL DAY TO SECOND

 例えば以下のようなコードを実行した場合に、安全な型マッピング機能を使用しないとエラーが発生します。

Dim cnn As New OracleConnection(
  "user id=scott;password=tiger;data source=orcl")
Dim strSql As String = "select 10/3 from dual"
Dim cmd As New OracleCommand(strSql, cnn)
Dim da As New OracleDataAdapter(cmd)
Dim ds As New DataSet
da.Fill(ds, "resultlist") '// この行でエラーが発生
リスト19 安全な型マッピング機能を使用しないコード(VB.NET)

OracleConnection cnn = 
  new OracleConnection(
    "user id=scott;password=tiger;data source=orcl");
String strSql = "select 10/3 from dual";
OracleCommand cmd = new OracleCommand(strSql, cnn);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "resultlist"); // この行でエラーが発生
リスト20 安全な型マッピング機能を使用しないコード(C#)

 上記のコードを実行すると、以下のエラーが発生します。

図3 型変換エラーによるエラー発生画面 図3 型変換エラーによるエラー発生画面

 このようなエラーを回避するには、以下のようにコードを変更します。

Dim cnn As New OracleConnection( _
  "user id=scott;password=tiger;data source=orcl")
Dim strSql As String = "select 10/3 from dual"
Dim cmd As New OracleCommand(strSql, cnn)
Dim da As New OracleDataAdapter(cmd)
Dim ds As New DataSet
da.SafeMapping.Add("*", GetType(System.String))
da.Fill(ds, "resultlist")
リスト21 安全な型マッピング機能を使用したコード(VB.NET)

OracleConnection cnn = 
  new OracleConnection(
    "user id=scott;password=tiger;data source=orcl");
String strSql = "select 10/3 from dual";
OracleCommand cmd = new OracleCommand(strSql, cnn);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.SafeMapping.Add("*", typeof(String));
da.Fill(ds, "resultlist");
リスト22 安全な型マッピング機能を使用したコード(C#)

 以上のようにOracleDataAdapterのSafeMappingプロパティを使用して安全な型マッピングを行うことが可能です。上記のコードではSafeMappingプロパティの指定に「*」を指定し、すべてのフィールドをマッピングしていますが、フィールド名を指定してマッピングすることも可能です。SafeMappingプロパティの詳細については、OTNの「Oracle Data Provider for .NET開発者ガイド」にて詳細に説明してありますので、そちらを参照してください。


 今回はODP.NETからOracleデータベースへのデータアクセスについて説明しました。次回はOracleデータベース上に実装されたネイティブXMLデータベース機能「Oracle XML DB」をODP.NETから使用する方法について説明します。どうぞご期待ください。(次回へ続く)

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。