- - PR -
1フィールドに複数のBLOBデータ登録
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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が作成されます | ||||
|
投稿日時: 2009-04-01 12:29
zipファイルにしてからblobフィールドに入れるとか。
この場合はzipファイルを展開すれば復元できますね。 別に個々のファイル名と区切りが何バイト目かを保存するフィールド(またはレコード)を持てばzipに頼らなくてもできそうですね。 いずれにせよblobはファイルを保存するだけのものではなく、もっと汎用性の高いものなので、工夫次第ですよ。 なぜ、複数のファイルを入れなければならないのかが不明ですけど。 | ||||
|
投稿日時: 2009-04-01 12:56
Java僧さま、回答ありがとうございます。
なぜ複数ファイルを入れなければならないか・・ クライアントからはACCESS2007で提供されている”添付ファイル型”と 同様のイメージを要求されています。 これがまた便利で、複数ファイルを添付できちゃうんですよね。 自分で実装となると???なのですが・・・ | ||||
|
投稿日時: 2009-04-01 13:08
とすると
UIをどうするかの問題で、 ファイルのデータをあえて1つのフィールドに纏めなくてもよいのでは? | ||||
|
投稿日時: 2009-04-01 13:39
turutosiyaさま、回答ありがとうございます。
ファイルを何個添付されるか決まっていないため、1フィールドに登録しようと 考えました。 最大何個までと決めればその分フィールドを用意すれば済みますね。 Java僧さまから回答いただいた ------------------------------------------------------------------------------ 個々のファイル名と区切りが何バイト目かを保存するフィールド(またはレコード)を持てば ------------------------------------------------------------------------------ で考えてみようかなと思っています。 | ||||
|
投稿日時: 2009-04-01 13:52
1つのレコードに対し複数の値(ファイル)を持つのであれば
普通はキーで紐付いた別テーブルに持つと思いますがいかがでしょうか。
| ||||
|
投稿日時: 2009-04-01 15:53
Kingさま、回答ありがとうございます。
確かにおっしゃる通りです! まぁ、複数値フィールドも便利な事もあると思いますが、 テーブル設計から見直してもらうのも方策ですね。 |
1