- - PR -
C#+OLE Oracle BLOB型を取得できますか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-11 18:04
C#とData Provider for OLE DBを使用して、Oracle内の
テーブルに、BLOBで格納しているデータを取得したいと 思っています。 そもそも、BLOBデータは、取得可能なのでしょうか? 可能であれば、取得方法を教えて頂けないでしょうか? よろしくお願いします。 ODPを使用しない理由: Data Provider for OLE DB を使用した理由は、OracleとMDBを、 Connectionのみを変えることによって、アクセスするクラス (SQLを実行するクラス)を共通化しようと思ったからです。 | ||||||||
|
投稿日時: 2005-06-11 23:28
こちらが参考になるかと。
データベースからのBLOB値の取得 | ||||||||
|
投稿日時: 2005-06-12 06:31
マイクロソフトから提供されている 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サンプル集 | ||||||||
|
投稿日時: 2005-06-12 15:42
いーたさん、Accessさん、返信ありがとうございます。
早速、いーたさんの教えていただいた情報をもとに、 サンプルを作ってみます。 Accessさんの教えていただいたページは、興味深い ですね。 サンプルを作って、動作確認後、じっくり読んで 見たいと思います。 アドバイスをありがとうございました。 | ||||||||
|
投稿日時: 2005-06-13 10:54
早速、上記のマニュアルを参考にしつつ、サンプルを作ってみたのですが、 失敗しました。 (サンプルは、SQL Server用で、SqlConnectionをOleConnectionに 変更しただけでは、ダメでした) やはり、OracleのBLOBには、Ole DBでは、対応できないのでしょうか? | ||||||||
|
投稿日時: 2005-06-13 11:16
かいさん、こんにちは。
何がどうダメだったんですか?
取り敢えず、「OLE DB」「BLOB」で検索。 | ||||||||
|
投稿日時: 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パッケージの使用は必須なのでしょうか? 長文になって、見にくくなり、すみません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-06-13 15:59
かいさん、こんにちは。
ご覧の通り、私のサンプルでは OleDbDataReader を使用していませんでしたね。
|