- PR -

C#+OLE Oracle BLOB型を取得できますか?

投稿者投稿内容
かい
常連さん
会議室デビュー日: 2003/05/27
投稿数: 34
投稿日時: 2005-06-11 18:04
C#とData Provider for OLE DBを使用して、Oracle内の
テーブルに、BLOBで格納しているデータを取得したいと
思っています。

そもそも、BLOBデータは、取得可能なのでしょうか?
可能であれば、取得方法を教えて頂けないでしょうか?

よろしくお願いします。

ODPを使用しない理由:
Data Provider for OLE DB を使用した理由は、OracleとMDBを、
Connectionのみを変えることによって、アクセスするクラス
(SQLを実行するクラス)を共通化しようと思ったからです。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-06-11 23:28
こちらが参考になるかと。

データベースからのBLOB値の取得
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-06-12 06:31
引用:

ODPを使用しない理由:
Data Provider for OLE DB を使用した理由は、OracleとMDBを、
Connectionのみを変えることによって、アクセスするクラス
(SQLを実行するクラス)を共通化しようと思ったからです。


マイクロソフトから提供されている
Enterprise LibraryのData Access Application Block
を利用したらどうでしょうか。
このライブリを使用するとDALを分離して3階層のアプリを
作成できます。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/daab.asp

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
かい
常連さん
会議室デビュー日: 2003/05/27
投稿数: 34
投稿日時: 2005-06-12 15:42
いーたさん、Accessさん、返信ありがとうございます。

早速、いーたさんの教えていただいた情報をもとに、
サンプルを作ってみます。

Accessさんの教えていただいたページは、興味深い
ですね。
サンプルを作って、動作確認後、じっくり読んで
見たいと思います。

アドバイスをありがとうございました。
かい
常連さん
会議室デビュー日: 2003/05/27
投稿数: 34
投稿日時: 2005-06-13 10:54
引用:

こちらが参考になるかと。

データベースからのBLOB値の取得



早速、上記のマニュアルを参考にしつつ、サンプルを作ってみたのですが、
失敗しました。
(サンプルは、SQL Server用で、SqlConnectionをOleConnectionに
 変更しただけでは、ダメでした)

やはり、OracleのBLOBには、Ole DBでは、対応できないのでしょうか?
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-06-13 11:16
かいさん、こんにちは。

引用:

(サンプルは、SQL Server用で、SqlConnectionをOleConnectionに
 変更しただけでは、ダメでした)


何がどうダメだったんですか?

引用:

やはり、OracleのBLOBには、Ole DBでは、対応できないのでしょうか?


取り敢えず、「OLE DB」「BLOB」で検索

かい
常連さん
会議室デビュー日: 2003/05/27
投稿数: 34
投稿日時: 2005-06-13 15:03
きくちゃんさん、返信ありがとうございます。

説明不足ですみませんでした。
また、アドバイスありがとうございました。

Insertについては、問題なくできました。
(ExecuteNonQuery()については、問題ないと考えています)

Selectでは(ExecuteReader)では、PL/SQLパッケージを通して
取得はできましたが、PL/SQLパッケージを通さないと次のエラー
を検出していまいます。

<エラー内容>---------------------
Exception Message:
Oracle エラーが発生しましたが、エラー メッセージは Oracle から取得できませんでした。

Exception StackTrace:
データ型はサポートされていません。
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteReader()
------------------------------

実行したプログラムの抜粋したものを次に載せます。
@:PL/SQLパッケージを利用
A:パッケージの利用無し→ 上記のエラーを検出

@//dbCmd.CommandText = "SELECT dbms_lob.substr(GAZOU, 1024) FROM EMPLYEE" ;
AdbCmd.CommandText = "SELECT GAZOU FROM EMPLYEE" ;

byte [] outBuff = new Byte[4];

OleDbDataReader dr = dbCmd.ExecuteReader() ;
dr.Read() ;
outBuff = (byte[])dr.GetValue(0) ;

きくちゃんさんのVBでのサンプルは、PL/SQLパッケージを使っていない
ように見えましたが、C#では、PL/SQLパッケージの使用は必須なのでしょうか?

長文になって、見にくくなり、すみません。
よろしくお願いします。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-06-13 15:59
かいさん、こんにちは。

引用:

きくちゃんさんのVBでのサンプルは、PL/SQLパッケージを使っていない


ご覧の通り、私のサンプルでは OleDbDataReader を使用していませんでしたね。

引用:

Buff = Comm.ExecuteScalar()


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