ASP.NET(VB)アップロードされたファイルをDBに保存する方法

ASP.NETでアップロードされたファイルを、DBに格納する方法のメモ。

開発をしていて、データの保存場所に困ることがある。
フォルダにそのまま格納しておくと分散が大変とか、
ファイルの管理が大変とか、いろいろな悩みがあるだろう。
その時の選択肢としてよく上がるのが、DBをストレージとして使う方法だ。
ファイルとしてフォルダに置くのではなく、DBに格納し必要な時にSQLで取り出す。
データはDBに保存してあるので、DBのバックアップを取っておけばOK。
DBのパフォーマンスは気になるが、選択肢としてあるだろう。

そんなとき、ASP.NETでアップロードされたファイルを直接DBに保存する。
ファイルとしてサーバ上に置かなくていいので、ゴミもできない便利な方法だ。

■画面側

まず、ASPX側にはFileUploadコントロールを配置する。(これのIDはFileUpload1とする)
これで、ファイルを指定するボタンとファイルが指定されるテキストボックスができる。

■VB側の処理

FileUploadコントロールのPostedFile.InputStreamメソッドでアップロードされたファイルを
Streamオブジェクト(バイトデータ)として読み込むことができる。
ただ読むことができる、いってもそのままDBに格納できるわけではないので、
一度、変数に読み取ったバイトコードを格納し、それをSQLパラメータにいれる。
わかってしまえば、どうということはない処理だ。

■サンプルコード

 Try
     'SQL Connectionの作成(参考:マスタページ側で処理してる)
     Dim dbCon As SqlConnection = New SqlClient.SqlConnection
     dbCon.ConnectionString = ConfigurationManager.ConnectionStrings("DBconnect").ConnectionString
     dbCon.Open()
     
     'Transactionの作成(参考:マスタページ側で処理してる)
     Dim dbTrans As SqlTransaction
     dbTrans = dbCon.BeginTransaction(IsolationLevel.ReadCommitted)
      
      
     'DBには、VarBinary型もしくはimage型のFileDataというカラムがある想定
      Dim sql As String = "INSERT INTO FileStorage (FileData) VALUES (@file)"
      
      Dim command As SqlCommand = New SqlCommand(sql, dbCon, dbTrans)
      
      'Byteデータとしてアップロードされたファイルを読み込む
      Dim binaryData(FileUpload1.PostedFile.InputStream.Length) As Byte
      FileUpload1.PostedFile.InputStream.Read(binaryData, 0, FileUpload1.PostedFile.InputStream.Length)
      command.Parameters.Add("@file", SqlDbType.VarBinary).Value = binaryData
      
     'SQLの実行
     Dim result As String
     result = command.ExecuteNonQuery()
     
     'SQL Connectionを閉じる。
     dbCon.Close()
 Catch ex As Exception
     dbCon.Close()
     
     Response.Write("失敗。。。")
 End Try
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする