- PR -

ODP.NETでLONG RAW型の項目からデータを読み出すには

1
投稿者投稿内容
のり
会議室デビュー日: 2005/05/22
投稿数: 7
お住まい・勤務地: 東京都在住
投稿日時: 2005-06-04 16:50
お疲れ様です、のりと申します。

現在、VC#.NETでExcelファイルをバイナリデータとしてOracleのDBのLONG RAW型の項目へ
INSERTしそれを別の処理でSELECTして使用するということをしています。

ODP.NETを使用してINSERTすることは出来たのですがそれをSELECTしようとすると、
SELECTは失敗しないのですが取得したLONG RAW型の項目が空で取得されてしまいます。
他のVARCHAR2等の型の項目は取得出来ていました。
とりあえず、SELECTの場合はADO.NETを使用すれば取得出来ているので現在はADO.NETで
取得していますが出来ればODP.NETで取得したいと思っています。
コードは以下の通りになっています。

コード:

StringBuilder sbw00Select = new StringBuilder("");
sbw00Select.Append("SELECT BIN_EXCELDATA , ");  //ExcelBinaryデータ
sbw00Select.Append("       DATA , ");
sbw00Select.Append("  FROM WORK ");
sbw00Select.Append(" WHERE A = '" + strA + "' ");
sbw00Select.Append("   AND B = '" + strB + "' ");

//SQL実行
OracleDataReader odr = this.objOracle.oraSelect(sbw00Select.ToString());


//SELECT用メソッド
public OracleDataReader oraSelect(string sql)
{
    // SQL実行
    this.oc.CommandText = sql;
    this.oc.CommandType = CommandType.Text;
    try
    {
        this.odr = this.oc.ExecuteReader();
    }
    catch( Exception ex )
    {
        throw ex;
    }
    // 結果返却
    return this.odr;
}


私の方でも調べてみたのですが解決策が見つかりませんでした。
申し訳ないですがご教授よろしくお願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-06-05 09:53
で、肝心の取得するための処理は、このコードの何処に?
一応指摘しておくと、ADP.NETはAPI仕様です。ODP.NETはADO.NET対応データブロバイダのひとつなので、「ODP.NETでは出来ないけどADO.NETでは大丈夫」と言うのは、意味不明ですよー

Oracle Technology Network(OTN)のODP.NET技術資料の「Oracle データベースを利用したMicrosoft .NET 開発 - 応用編」にLOBデータを扱うときのサンプルが書かれているので、それを真似て記述してみてください。


[ メッセージ編集済み 編集者: 甕星 編集日時 2005-06-05 10:10 ]

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-06-05 10:11 ]

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-06-05 10:11 ]
のり
会議室デビュー日: 2005/05/22
投稿数: 7
お住まい・勤務地: 東京都在住
投稿日時: 2005-06-05 18:05
お疲れ様です、のりです。
すみません、肝心の取得する部分が抜けていました。
実際の取得する部分は以下のとおりになっています。

コード:
string strExcelFile = "C:/work/upload.xls";
FileStream Fs;
BinaryWriter Bw;
Fs = new FileStream(strExcelFile, FileMode.Create, FileAccess.Write);
Bw = new BinaryWriter(Fs);

//Excelファイル作成
byte[] bytUpLoadData = new byte[100];
bytUpLoadData = (byte[])odr["BIN_EXCELDATA "];
Bw.Write(bytUpLoadData,0,bytUpLoadData.Length);


引用:

Oracle Technology Network(OTN)のODP.NET技術資料の「Oracle データベースを利用したMicrosoft .NET 開発 - 応用編」にLOBデータを扱うときのサンプルが書かれているので、それを真似て記述してみてください。


情報ありがとうございます、サンプルコードを参考に修正してみます。
今は自宅にいるので対応できませんので、明日会社に行った時に対応してみます。
その時にまた結果を報告させてもらいます。
のり
会議室デビュー日: 2005/05/22
投稿数: 7
お住まい・勤務地: 東京都在住
投稿日時: 2005-06-06 12:17
お疲れ様です、のりです。
>>甕星さん
情報ありがとうございました。
今日、色々試してみてコードを修正するのではなく項目の属性をLONG RAW型からBLOB型へ
変更して試してみたところ問題なく取得することが出来ました。
ただ、何故LONG RAW型の場合は取得出来なかった事については未解決のままです。
とりあえず、開発はこの変更のまま続けて時間があるときに調査してみようと思います。
色々とご教授、情報提供して頂きありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)