- - PR -
SQLServerに登録した画像データのブラウザへの表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-20 21:09
いつもお世話になっております。 Visiual.NET2003(ASP.NET/VB)とSQLServer2000で開発してます。 件名の内容について http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15974&forum=7 http://www.atmarkit.co.jp/fdotnet/dotnettips/257aspdbbinary2/aspdbbinary2.html http://www.microsoft.com/japan/msdn/asp.net/tips/DataBaseImage2/ を参考にさせていただいて ------------------------------------------------------------------ 表示させたいページ → Default.aspx BinaryWriteしているページ → image.aspx ------------------------------------------------------------------ -Default.aspx----------------------------------------------------- <Page.load>に以下を記述 Image.ImageUrl = "image.aspx" ------------------------------------------------------------------ -image.aspx------------------------------------------------------- <Page.load>に以下を記述 [データ取得後] Response.ClearContent() Response.ContentType = CType(MyReader.Item("image_type"), String) Response.Flush() Response.BinaryWrite(CType(MyReader.Item("image"), Byte())) Response.End() ------------------------------------------------------------------ と記述し、DBにバイナリデータで登録され MIMEタイプも"image/gif"と登録されてます。 "Image.aspx"でデータを取得しているのも確認済みです。 しかし、Imageコントロールには「×」と表示されるだけで 登録した画像ファイルが表示されません。 他に設定する必要があるのでしょうか。 ご教授いただけますよう宜しく御願い致します。 | ||||
|
投稿日時: 2006-06-20 23:25
ちなみにMyReaderの元となったSELECT文と対象のテーブルはどのような定義になっていますか?
| ||||
|
投稿日時: 2006-06-21 10:23
burton999さん、返答頂き有難うございます。 テーブル(MyTaBle)の定義は -My Table------------------------------------------------------------ <定義> image_id | int(4)[主キー] image_name | varchar(100) image_type | varchar(50) image | image(16) ---------------------------------------------------------------------- この”MyTable”へ”image.aspx”で下記のSelect文を実行しています。 -Select文------------------------------------------------------------- "SELECT image_type, image FROM MyTable WHERE image_id = @IMAGE_ID" ※パラメータ”@IMAGE_ID”は、”Default.aspx”で表示したい データレコードを選択後にSessionへ格納し”image.aspx”へ 引き渡しています。 ---------------------------------------------------------------------- 宜しく御願い致します。 | ||||
|
投稿日時: 2006-06-21 10:27
Sessionに表示したいデータレコードを格納した後でimage.aspxを
直接開いてデータは表示できますか? | ||||
|
投稿日時: 2006-06-21 11:22
どっとねっとふぁんさん、返答頂き有難うございます。 ---引用:-------------------------------------------------------- Sessionに表示したいデータレコードを格納した後でimage.aspxを 直接開いてデータは表示できますか? ---------------------------------------------------------------- 早速、試してみましたが、”Default.aspx”の時と同様に ”image.aspx”に「×」と表示されるだけです。 | ||||
|
投稿日時: 2006-06-21 12:22
そうなると、DBに格納されているバイナリデータが怪しいですね。
バイナリデータをそのままファイルに出力すると、gifファイルとして有効ですか? DBにimageを登録するロジックはどのようになっていますか? | ||||
|
投稿日時: 2006-06-21 15:59
---引用:--------------------------------------------------------
そうなると、DBに格納されているバイナリデータが怪しいですね。 バイナリデータをそのままファイルに出力すると、gifファイルと して有効ですか? DBにimageを登録するロジックはどのようになっていますか? ---------------------------------------------------------------- 有難うございます。 ご指摘の箇所に関わる辺りを確認したところ パラメータの定義に誤りがありました。 ---------------------------------------------------------------- Dim aryData(txt_family_member.PostedFile.ContentLength) As Byte cmd.Parameters.Add("@image", System.Data.SqlDbType.Image, 16, "image").Value = aryData ---------------------------------------------------------------- となっていたので ---------------------------------------------------------------- Dim aryData(txt_family_member.PostedFile.ContentLength) As Byte cmd.Parameters.Add("@image", System.Data.SqlDbType.VarBinary, 2147483647, "image").Value = aryData ---------------------------------------------------------------- と変更したところ、ちゃんと表示されました♪ データ型の指定は、”Image”ではなく”VarBinary”に しなければいけなかったんですね。。。。 初歩的ななミスですね・・・ お騒がせして申し訳ありませんでした。 また、お世話になることがあるかと思いますので その際も宜しく御願い致します。 | ||||
|
投稿日時: 2006-06-21 16:12
型はImage型で問題ないはずです。
問題なのは
の第3引数の16だと思います。 これはイメージの最大サイズになるので16byteじゃマズイです。 「SQL Server Enterprise Manager」などのツールでImage型の列定義を見ると サイズは16byteと表示されますが、これはImageデータそのもののサイズではありません。 NTEXT型やImage型のデータは、行データとは別の領域の格納されます。 なので、16byteの領域に格納されるのは、実際のデータのある位置(ポインタみたいなもの)です。 なので、上記のサイズ指定で16というのが誤りです(多分。。。) ちなみにSqlParameterクラスにおいてサイズは省略可能です。 省略した場合、サイズはパラメータ値から推論されます。 [ メッセージ編集済み 編集者: burton999 編集日時 2006-06-21 16:17 ] |