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 型変換エラーによるエラー発生画面
このようなエラーを回避するには、以下のようにコードを変更します。
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から使用する方法について説明します。どうぞご期待ください。(次回へ続く)