- ベストアンサー
SQL serverへの画像の取り込み方法
- SQL serverへの画像の取り込み方法について初心者ですが教えてください。
- Varbinary型を使用してSQL serverへ画像ファイルを保存する方法を教えてください。
- 画像のパスを選択し、SQL serverのvarbinary型のフィールドに登録する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私の紹介したのは、フォームの動きとは関係なく、特定のファイルをバイナリでデータベースに収録する方法です。 PictureBoxはフォーム上に配置するオブジェクトで、データベースのフィールドをバインドさせることによって、確かに保存することもできます。 ただし、PictureBoxは特定の種類の「画像ファイル」のために準備されているもので、PDFはサポート外です。 したがって、WebBrowserコントロールを使うのが一番楽だと思います。 Windowsアプリの場合、PDFは一旦データベースから取出してファイルにしてあげる必要があります。 (「VB.NET WebBrowser PDF」で検索してみてください) 上記以外の方法は難易度がぐっと上がりますので、もう少し習熟してからトライされるのがよいでしょう。 (すくなくとも一旦PDFファイルに戻した時点で、SQL Serverの質問ではなく、VB.NETの質問になりますよね)
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
うーん、サンプル示しておいた方がいいですかねぇ。 画像もPDFもバイナリデータだから、基本何も変わらないです。 前者はアプリケーション寄り、後者はデータベース寄りの書き方です。 両方知っておくといいと思いますが、まずは前者ですかね。 DBがリモートにある場合、両者には大きな違いがありますので、その辺もおいおい調べてください。 Dim sConStr As String = "接続文字列" Dim sPath As String = "ファイルフルパス" Using sqlConn As New SqlConnection(sConStr) sqlConn.Open() Using sqlCmd As New SqlCommand() sqlCmd.Connection = sqlConn sqlCmd.CommandText = "INSERT INTO TESTTBL(ID,PICTURE) VALUES (@id,@picture)" sqlCmd.Parameters.Add(New SqlParameter("@id", 123)) Dim sqlParmBin As New SqlParameter("@picture", SqlDbType.VarBinary) sqlParmBin.Value = File.ReadAllBytes(sPath) sqlCmd.Parameters.Add(sqlParmBin) Dim rc As Integer = sqlCmd.ExecuteNonQuery() End Using End Using Dim sConStr As String = "接続文字列" Dim sPath As String = "ファイルフルパス" Using sqlConn As New SqlConnection(sConStr) sqlConn.Open() Using sqlCmd As New SqlCommand() sqlCmd.Connection = sqlConn sqlCmd.CommandText = "INSERT INTO TESTTBL(ID,PICTURE) " & _ "SELECT @id, x.* FROM OPENROWSET(BULK N'" & sPath & "', SINGLE_BLOB) x" sqlCmd.Parameters.Add(New SqlParameter("@id", 123)) Dim rc As Integer = sqlCmd.ExecuteNonQuery() End Using End Using ※後者はSQL Serverの構成ツールにある「SQL Serverセキュリティ構成」で「アドホックリモートクエリを許可」しないとうごきません。
お礼
回答いただきましてどうもありがとうございます。 早速試して動作を確認いたしました。感激です!追加でお願いあるのですがもしよろしければ以下を教えていただけないでしょうか? 1)下記、記述方法とどのような差がありますでしょうか? PicturePictureBox.Image = Image.FromFile("C:\001.jpg") ↑ VBのFORM1においた SQLのPicutreのフィールドです。 ここからDocuBindingSourceをつかって保存をするとSQLにも保存されました。 2)PDFをここに入れてみたところ、FORM1上のPICTURE BOXに表示されなくなりましたが、ダブルクリックて開けるような表示は可能でしょうか? 海外に住んでおり、なかなか日本語の参考書が手に入らずお手数おかけしております。何卒よろしくお願いいたします。
- jamshid6
- ベストアンサー率88% (591/669)
リンクのサイトが参考になると思います。 C#ですが、VBで書いているなら読み換えてください。 SQL ServerとADO.NETを用いたBLOB(バイナリラージオブジェクト)の処理方法 http://codezine.jp/article/detail/3026
お礼
お返事どうもありがとうございます。お恥ずかしながらC#も全く分からない状況でして、せっかく紹介頂きましたのに大変申し訳ありません。 今、ボタンを押して、イベントで PicturePictureBox.SizeMode = PictureBoxSizeMode.StretchImage PicturePictureBox.Image = Image.FromFile("C:\001.jpg") で画像を取込むまでは行ったのですが、このパスを可変する方法が 分かれば!なんて考えていました。 まったく間違った方向でしょうか? また、紹介いただきましたサイトで(BLOBをディスクファイルとして格納する)という方法がありますが、将来的にPDFなどを保存できればいいと思いますのでもしVBでそのような方法が載っているサイトがあれば御教授お願いいたします。
お礼
なるほど、そのようなコントロールがあるのですね。使いこなせるまでにまた時間がかかりそうなのでこれから詳細を勉強してみます。 いろいろとアドバイスどうも有り難うございました。 今後、もっと勉強して頂いたサンプルなどきちんと細かい意味がわかるようにしていきたいと思います。ご丁寧に本当にどうも有り難うございました。