- PR -

OLEDBでBLOBへの登録

1
投稿者投稿内容
まじかる
会議室デビュー日: 2008/04/23
投稿数: 3
投稿日時: 2008-04-24 20:08
いつも参考にしております。
早速ですがお知恵をお貸しください。

Oracleクライアント 8.0.5
オラクルサーバー  10.2.0.1.0
VB2005
にて開発しています。
クライアントの環境は変更不可という要件です。


http://support.microsoft.com/default.aspx?scid=kb;ja;316887
や過去ログなどを参考にして以下のコードを作成しました。

やりたいことは
BLOB列に画像、PDF、テキストの3種類を格納したいのです。

対象が画像ファイルの際はcmd.ExecuteNonQuery()にて
「ORA-01460: リクエストされた変換はできません。」となります。
調べてみたものの参考になりそうなものが見つけられず・・・
この回避方法をご存知の方、
また、コードの間違い等ヒントでもいいのでお願いします。

なお、FileStreamの対象を.txtや.pdfにすれば上記メッセージは発生しませんが、
BLOB列には何も入っていない?(CSEというツールを使いSELECT文での確認)状態です。



============================================================
【Oracleテーブル】
CREATE TABLE TIMAGE
(
 ID NUMBER NOT NULL,--ID
 NAME VARCHAR2(100) NOT NULL,
 IMAGE BLOB ,
 CONSTRAINT TIMAGE PRIMARY KEY(ID)
)

【ソースコード】
Me.txtImage.Text = "imagename"
Dim fs As New System.IO.FileStream("c:\image.bmp", IO.FileMode.Open, IO.FileAccess.Read)
Dim blobData(CInt(fs.Length) - 1) As Byte
fs.Read(blobData, 0, CInt(fs.Length))
fs.Close()

Dim con As New OleDb.OleDbConnection("接続文字列")
Dim strSql As String
strSql = "INSERT INTO TIMAGE (ID, NAME, IMAGE)"
strSql = strSql & " VALUES((SELECT MAX(ID)+1 FROM TIMAGE), '" & Me.txtImage.Text & "', ?)"
Dim cmd As New OleDb.OleDbCommand(strSql, con)
con.Open()
Dim pBlob As OleDb.OleDbParameter = cmd.Parameters.Add("blobdata", OleDb.OleDbType.LongVarBinary, blobData.Length)
pBlob.Value = blobData
cmd.ExecuteNonQuery()
con.Close()
============================================================
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-04-25 20:03
DataAdapterとCommandBuilderを使う方法を紹介しておきます。
http://support.microsoft.com/default.aspx?scid=kb;ja;309158
まじかる
会議室デビュー日: 2008/04/23
投稿数: 3
投稿日時: 2008-04-28 10:03
todo 様
ご提示いただいたページを元に
SqlClientをOleDbに変更して試してみました。

しかし、Fillの時点で以下のエラーとなります。
"エラーを特定できません
Oracle エラーが発生しましたが、エラー メッセージは Oracle から取得できませんでした。
データ型はサポートされていません。"

これは現在使用しているオラクルのバージョンでは回避できないと考えていますが
方法がありますでしょうか?
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dtssql/dts_usage_3ayb.asp
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-04-28 10:18
私自身はわかりませんが、過去スレッドを漁ってみたら以下のスレッドを発掘したので貼っておきますね。

OracleのLONG RAWタイプカラムにバイナリデータを保存したい
まじかる
会議室デビュー日: 2008/04/23
投稿数: 3
投稿日時: 2008-04-28 16:44
rain 様
ご提示いただいたページのももだいさんのソースを丸ごと移植した場合は問題ありませんでした。
しかしながら、byte配列の対象をファイルにした場合はやはり
ExecuteNonQueryで「ORA-01460: リクエストされた変換はできません。」となります。

いろいろ試してみて
サイズが4kのPDFですとエラーは出ずに、1Mだと出ました。
サイズが影響しているようですね・・・
1

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