- PR -

画像ファイルをBLOB型で保存(oracle8.1.7)

1
投稿者投稿内容
PADROCK
会議室デビュー日: 2004/03/15
投稿数: 13
投稿日時: 2004-04-13 13:55
Oracle8.1.7のBLOB型のフィールドに画像ファイルを格納したく
下記の記事を参考にし、プログラムを組んだのですが、うまくいきませんでした。

[HOW TO] Visual Basic .NET で ADO.NET を使用して
BLOB データの読み取りや書き込みを行う方法
http://support.microsoft.com/default.aspx?scid=kb;ja;jp308042

言語はASP.NET(C#)で行っています。

どなたかお力をお貸しください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-13 14:05
 Oracleを使用されるのですよね?参照されたところはSQL Serverを対象に作成されています。参照先のどこを、どのように修正して試したところ、どのようなことを期待して、どのような結果が得られたのでしょう?

 「うまくいきませんでした」では漠然としすぎて、この場合だと「System.Data.SqlClient名前空間のクラスを使ったら、そりゃぁ、うまくいかんわな」と思ってしまいます。よけいな時間をかけることになりますから、5W1Hは不足なく伝えましょう。
PADROCK
会議室デビュー日: 2004/03/15
投稿数: 13
投稿日時: 2004-04-13 14:47
>Jittaさん
おはやいお返事ありがとうございます。
おっしゃる通りです。説明がたらな過ぎでした。反省します。
しかも、参考にした記事を間違えていました。
もうすこし、しっかりした質問をしないと
どなたにも意味が通らないですよね。

ちなみに参考にしたのは

[HOWTO] Visual C# でデータベースから
PictureBox コントロールに画像を直接コピーする方法
http://support.microsoft.com/default.aspx?scid=kb;ja;317701

でした。それと実はもうひとつ参考にした記事があったのですが
個人様のサイトなので割愛させていただきます。
(最初の質問時もこの理由から書きませんでした)

それと今回私が作成したプログラムは
ASPの画面にテキストボックスが1つ、ボタンが1つあり
ボタンを押されると以下に記すプログラムが実行する形になっております。

コードを以下に記します。

コード:
OleDbConnection DBConn = new OleDbConnection("Provider=MSDAORA.1;User ID=aaa;Data Source=TEST;Password=aaa;");

OleDbTransaction trnFs01; 
OleDbCommand cmdFs01; 

byte [] bytBLOB_DATA;
cmdFs01 = new OleDbCommand(); 

DBConn.Open(); 

trnFs01 = DBConn.BeginTransaction(); 
cmdFs01.Transaction = trnFs01; 
cmdFs01.Connection = DBConn; 

cmdFs01.CommandText = "INSERT INTO TBL_BLOB_TEST(BLOBID, BLOB_DATA) values(?,?)"; 

String strBLOBFilePath = @"D:\test.jpg";
FileStream fsBLOBFile =  new FileStream(strBLOBFilePath,FileMode.Open, FileAccess.Read);
bytBLOB_DATA = new Byte[fsBLOBFile.Length]; 
fsBLOBFile.Read(bytBLOB_DATA, 0, bytBLOB_DATA.Length);

cmdFs01.Parameters.Add("BLOBID", OleDbType.Char, 10, "BLOBID").Value = TextBox1.Text;
cmdFs01.Parameters.Add("BLOB_DATA", OleDbType.LongVarBinary).Value = bytBLOB_DATA; 

fsBLOBFile.Close();

cmdFs01.ExecuteNonQuery(); 
trnFs01.Commit(); 

DBConn.Close(); 



これを実行すると ExecuteNonQuery で落ちてしまいます。
エラー内容は
「ORA-03113: end-of-file on communication channel」
です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-13 16:24
 まず、OTN Japanの、「Oracle メッセージ検索」はご存じでしょうか?リンクは1つ上の「オンラインサービス」に張っています。この下に入るには、登録が必要です。
 このオンラインサービスを利用すると、OTN Japan掲示板の膨大なログから、該当するエラーメッセージに関する発言を検索してくれます。これを利用して、Oracleが出しているエラーが解決できるようにすることをお勧めします。

 パッと見て・・・
“D:/test.jpg”にアクセスできているのか?
これが大きすぎて通信を切られているのではないか?
やっぱり参照元はSQL SesrverやAccessなんだけど、大丈夫?
本稼働は「テキストボックスにファイル名入力」だと思うけど、本当に大丈夫?
(サーバはクライアントのローカルファイルにアクセスできないよ)
PADROCK
会議室デビュー日: 2004/03/15
投稿数: 13
投稿日時: 2004-04-13 16:47
「Oracle メッセージ検索」は知りませんでした。
後で検索してみます。

>>“D:/test.jpg”にアクセスできているのか?
ステップ実行をしてbytBLOB_DATAの内容を見てみたら、
値は入っていたので、多分アクセスできていると思います。

>>これが大きすぎて通信を切られているのではないか?
ファイルサイズは5Kなので大丈夫だと思うのですが
大きすぎるのでしょうか?

>>やっぱり参照元はSQL SesrverやAccessなんだけど、大丈夫?
OracleでBLOBを使用している資料が見つからなかった為、
しょうがなく参考にしました。一応Oracleに対応したつもりなのですが
もしかして、対応の方法が誤っているのでしょうか?

>>本稼働は「テキストボックスにファイル名入力」だと思うけど、本当に大丈夫?
>>(サーバはクライアントのローカルファイルにアクセスできないよ)
はい、それはわかっております。質問をする時に書けばよかったのですが、
本プログラムはBLOBを使用するテストをしているところなので
現在のようなサーバの画像ファイルを登録する形になっています。

一応、即レスできることはしておきました。
もう少し自分でも調べますが、もし何かありましたよろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-13 16:57
引用:

PADROCKさんの書き込み (2004-04-13 16:47) より:

>>本稼働は「テキストボックスにファイル名入力」だと思うけど、本当に大丈夫?
>>(サーバはクライアントのローカルファイルにアクセスできないよ)
はい、それはわかっております。質問をする時に書けばよかったのですが、
本プログラムはBLOBを使用するテストをしているところなので
現在のようなサーバの画像ファイルを登録する形になっています。


 ツールボックスの「HTML」に、「FileField」というのがあって、これを使ってファイルをアップロードします。これなんですけど、サイズ制限がかかっています。関係あるのかもしれません???
PADROCK
会議室デビュー日: 2004/03/15
投稿数: 13
投稿日時: 2004-04-13 17:27
Jittaさん度々ありがとうございます。

今サーバとクライアントが同じマシン内でテストしています。

>> ツールボックスの「HTML」に、「FileField」というのがあって、
>>これを使ってファイルをアップロードします。これなんですけど、
>>サイズ制限がかかっています。関係あるのかもしれません???
もしかして、自分ではサーバ内のファイルをアクセスしているつもりが
実はアップロードになっているんじゃないかって
Jittaさんの返答を見て思いました。
そうするとやっぱりサイズの制限はあると思いますし、、
そこで、今まで使用していた5Kの画像ファイルから
2Kの画像ファイルに変えてやってみました。
すると、見事成功しました。

これにより本プログラムの問題点が分かった気がします。
本来はサーバ内のファイルを使用するはずが、
アップロードされたクライアント側のファイルを使用しているようだ。
ということは画像を読込んでいる部分が誤っていると思います。
色々とありがとうございました。
実際どこが問題点かが分からなかったので、問題点が分かっただけでも
良かったです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-14 08:30
引用:

PADROCKさんの書き込み (2004-04-13 17:27) より:

もしかして、自分ではサーバ内のファイルをアクセスしているつもりが
実はアップロードになっているんじゃないかって
Jittaさんの返答を見て思いました。
そうするとやっぱりサイズの制限はあると思いますし、、
そこで、今まで使用していた5Kの画像ファイルから
2Kの画像ファイルに変えてやってみました。
すると、見事成功しました。


 サーバの構成がわかりませんが、ASP.NETサーバとOracleサーバが別々であれば、ASP.NETサーバからのアップロードという扱いになっているかも???

 また、クライアントからのアップロードに関しては、「System.Web.UI.HtmlClient.HtmlInputFile」の説明を見てください。アップロードできるファイルサイズの制限緩和についても、ここからリンクされています。
1

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