2009/01/08(Thu) 21:35:30 編集(投稿者)
■No30905 (ひでき さん) に返信
> OracleConnection connection = new OracleConnection("Data Source=XXX;User ID=XXX;Password=XXX;");
Using / Close は?
> 画面のPictureBoxに表示したい。
Long Raw に、生のバイナリがそのまま格納されているのであれば、
最初の No30893 のコードで、問題無く表示できますよ。
> Accessからリンクを張り
> メニューの「挿入」→「オブジェクト」
> から画像ファイルを選択し、登録を行いました。。
それはつまり、ODBCリンクテーブルに対しての操作ですよね。
Access VBA のアプリならば良いですが、C# アプリで使うのであれば、
その登録方法は避けてください。
Access の[挿入]メニューからの場合、ファイルの生バイナリが挿入されるわけでは無く、
OLE (パッケージャ)オブジェクトとしてのデータ挿入が行われる事になります。
http://support.microsoft.com/kb/884484/ja
このため、データ内に OLE ヘッダ情報が付加されてしまう結果となり、
元ファイルのバイナリとは一致しなくなってしまいます。
データ内容から、元データを予想して取り出す方法もありますが、
そもそもは、ファイルの生バイナリを登録しておくべきでしょう。
http://support.microsoft.com/kb/175261/ja
たとえば、Oracle 上に
CREATE TABLE XXX (XXX_CODE CHAR(3) PRIMARY KEY, PIC LONG RAW)
なテーブルを用意してあるのだとします。
C# から登録するのであれば、たとえばこんな感じ。
string sql = "INSERT INTO XXX (XXX_CODE, PIC) VALUES (:ID, :IMG)";
using (OracleCommand cmd = new OracleCommand(sql, connection))
{
OracleParameter ID = cmd.Parameters.Add("ID", OracleType.Char, 3);
OracleParameter IMG = cmd.Parameters.Add("IMG", OracleType.LongRaw);
ID.Value = "123";
IMG.Value = File.ReadAllBytes(@"C:\a.bmp");
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
■No30905 (ひでき さん) に返信
> Oracle専用に登録する手段があるならば
> そちらの方が良いとは思うのですが実行できていません;
生のバイナリを Oracle に登録するための画面は、Access 側には用意されていないので、
SQL で直接指定するか、Access VBA から AppendChunk メソッドを呼び出さねばなりません。
VBA のコードは書いても仕方ないので、SQL の記述例を書いておきます。
(下記では、画像のバイナリデータを 16進数にて指定しています)
****** ODBC リンクテーブルの場合 ******
INSERT INTO リンクテーブル名 (XXX_CODE, PIC) VALUES (
'123',
0x424D860000000000000076000000280000000400000004000000010004000000000010000000C40E0000C40E000000000000000000000000000000008000008000000080800080000000800080008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00AECD000026450000F89B000007130000
)
****** パススルー クエリの場合 ******
INSERT INTO XXX (XXX_CODE, PIC) VALUES (
'123',
HEXTORAW('424D860000000000000076000000280000000400000004000000010004000000000010000000C40E0000C40E000000000000000000000000000000008000008000000080800080000000800080008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00AECD000026450000F89B000007130000')
)