ファイルをバイナリデータに変換してDBに登録

タグの編集
投稿者 nanaly  (学生) 投稿日時 2017/6/8 16:27:07
環境:VB2010 SQLserver2016

お世話になります。

今回、EXCELファイルをバイナリデータに変換してDBに登録する
処理を作成しています。
作成にあたり、ファイルを取得する方法と取得したファイルをバイナリデータに
変換する方法をご教授していただきたいです。

かなり不足の多いところもあると思いますがお願いします。
投稿者 YuO  (社会人) 投稿日時 2017/6/8 19:28:45
ファイルは全てバイナリデータですが,
> EXCELファイルをバイナリデータに変換して
で言う「バイナリデータ」とは何でしょうか。

> ファイルを取得する方法
ファイルの「内容」を取得する方法,と読み替えますが,
・System.IO.File.ReadAllBytes
https://msdn.microsoft.com/ja-jp/library/system.io.file.readallbytes(v=vs.100).aspx
などを使えば,ファイルの内容を簡単に取得することが出来ます。
投稿者 kiku  (社会人) 投稿日時 2017/6/9 13:52:42

>作成にあたり、ファイルを取得する方法と取得したファイルをバイナリデータに
>変換する方法をご教授していただきたいです。

取得したファイルをバイナリデータに変換する方法については
下記が参考になると思います。

https://dobon.net/vb/dotnet/file/filestream.html

ファイルを取得する方法については、
どこにあるファイルを取得するのでしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/6/9 14:12:50
SQL Server 2016 であれば、FILESTREAM  ディレクトリを割り当てて、
FILETABLE として管理してみるのは如何でしょう。
https://codezine.jp/article/detail/6602
https://msdn.microsoft.com/ja-jp/library/ff929144.aspx
https://msdn.microsoft.com/ja-jp/library/gg509088.aspx

CREATE TABLE YourTable AS FILETABLE
  WITH 
  ( 
    FILETABLE_DIRECTORY = 'YourTable', 
    FILETABLE_COLLATE_FILENAME = database_default
  ) 



FILETABLE として管理せず、VARBIANRY 型のフィールドに保持したいのであれば、こういう方法もあります。DB サーバー上のファイルで、かつ、BULK 処理が可能な権限も必要ですが。

INSERT INTO YourTable ( id, fileName, fileContents) 
SELECT
  100 AS id,
  N'C:\ExcelFiles\sample.xlsx' as fileName, 
  yourFile.BulkColumn as fileContents 
FROM 
  OPENROWSET(BULK N'C:\ExcelFiles\sample.xlsx', SINGLE_BLOB) yourFile 



SQL Server 側からアクセスできないようなデータの場合には:

(案1) 16進バイナリリテラルを用いて渡すようにする。
INSERT INTO YourTable ( id, fileName, fileContents) 
VALUES ( 200, N'C:\Samples\demo.bin', 0x549B4C756E30EE4E6297015FEB58 ) 


(案2) VB 側で、System.IO.File.ReadAllBytes で Byte 配列に受け取った後で、
ADO.NET でパラメータクエリにして INSERT する。

http://you-the-r.blogspot.jp/2011/03/db-sqlserver-vbnet.html