- PR -

1フィールドに複数のBLOBデータ登録

1
投稿者投稿内容
@RFP
会議室デビュー日: 2009/04/01
投稿数: 4
投稿日時: 2009-04-01 11:13
いつも参考にしております。

環境:SqlServer2005、VB2005

現在、VB2005にてDBにBLOBデータ(EXCEL)を登録する機能を開発中です。
VarBinary(Max)のフィールドに1つのファイルを登録することはできたのですが、
複数のファイルを登録することはできるでしょうか?
また、ファイルへ復元する方法も知りたいです。
ご指南よろしくお願いします

以下、コード抜粋です。

'-------------------------------------
'BLOB登録
'-------------------------------------
Dim fs As New FileStream("c:\\XXX.xls", IO.FileMode.Open, IO.FileAccess.Read)
Dim ImageData(fs.Length) As Byte
fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length))
fs.Close()

上記の ImageData をDBに登録しています。

'-------------------------------------
'DBからファイル作成
'-------------------------------------
Dim PictureCol As Integer = 0 ' the column # of the BLOB field
Dim cmd As New SqlCommand(StrSql, cn)
cn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
dr.Read()
Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
dr.GetBytes(PictureCol, 0, b, 0, b.Length)
dr.Close()
cn.Close()
Dim fs As New System.IO.FileStream("XXX.XLS", IO.FileMode.Create,IO.FileAccess.Write )
fs.Write(b, 0, b.Length)
fs.Close()

XXX.XLSが作成されます
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2009-04-01 12:29
zipファイルにしてからblobフィールドに入れるとか。
この場合はzipファイルを展開すれば復元できますね。

別に個々のファイル名と区切りが何バイト目かを保存するフィールド(またはレコード)を持てばzipに頼らなくてもできそうですね。

いずれにせよblobはファイルを保存するだけのものではなく、もっと汎用性の高いものなので、工夫次第ですよ。
なぜ、複数のファイルを入れなければならないのかが不明ですけど。
@RFP
会議室デビュー日: 2009/04/01
投稿数: 4
投稿日時: 2009-04-01 12:56
Java僧さま、回答ありがとうございます。

なぜ複数ファイルを入れなければならないか・・
クライアントからはACCESS2007で提供されている”添付ファイル型”と
同様のイメージを要求されています。
これがまた便利で、複数ファイルを添付できちゃうんですよね。
自分で実装となると???なのですが・・・

turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2009-04-01 13:08
とすると
UIをどうするかの問題で、
ファイルのデータをあえて1つのフィールドに纏めなくてもよいのでは?
@RFP
会議室デビュー日: 2009/04/01
投稿数: 4
投稿日時: 2009-04-01 13:39
turutosiyaさま、回答ありがとうございます。

ファイルを何個添付されるか決まっていないため、1フィールドに登録しようと
考えました。
最大何個までと決めればその分フィールドを用意すれば済みますね。

Java僧さまから回答いただいた
------------------------------------------------------------------------------
個々のファイル名と区切りが何バイト目かを保存するフィールド(またはレコード)を持てば
------------------------------------------------------------------------------
で考えてみようかなと思っています。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-04-01 13:52
1つのレコードに対し複数の値(ファイル)を持つのであれば
普通はキーで紐付いた別テーブルに持つと思いますがいかがでしょうか。

コード:
<テーブルA>
ID
------------
001
002

<テーブルB>
ID   FILE
------------
001  aaa.xls
001  bbb.xls
001  ccc.xls
002  ddd.xls

@RFP
会議室デビュー日: 2009/04/01
投稿数: 4
投稿日時: 2009-04-01 15:53
Kingさま、回答ありがとうございます。

確かにおっしゃる通りです!
まぁ、複数値フィールドも便利な事もあると思いますが、
テーブル設計から見直してもらうのも方策ですね。


1

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