簡介:
         影像檔案與一般的文字或數字不同,無法將資料變成SQL句型的一部分,所以要寫入或讀出資料庫時會有困難。事實上其他二進位(檔案)資料,譬如PDF檔或音效、影片也都有類似的問題,本單元將以上傳網頁的影像檔為例,介紹如何將此類資料寫入資料庫,並能順利讀取與顯示的程式範例,學會這個技巧你才能說你的資料庫甚麼資料都可以存

建立資料庫
開一個ASP.NET網站做一張這樣的SQL資料表。

檔名設為主索引鍵,影像欄位將儲存二進位的影像資料,請選擇資料型態為:image

資料表命名為:影像表,暫時無須輸入資料。

建立網頁
開張ASPX網頁設計物件如下

左上是一個FileUpload物件,用於選擇本機影像檔案上傳網站之用,右上是一個執行上傳的Button按鍵,中央是一個ListBox物件,將用於顯示已經上傳的影像檔名,請將它連結到SQL資料庫的影像表,只需要『檔名』欄位,並開啟AutoPostBack功能。最下方是一個顯示影像用的Image物件。

上傳影像的程式
首先應該匯入兩個命名空間:
Imports System.Data.SqlClient
Imports System.Data

Button1_Click程式碼如下:

如程式內說明,檔案選擇後會先加上網站的磁碟路徑(Server.MapPath),接著存檔再讀取為Byte陣列,之後是資料庫的連結物件Connection設定。比較不同的是我們設定一個命令物件,也給了它一個SQL新增資料的指令,但是影像資料部分另外宣告一個Parameter變數,將影像資料寫入,然後執行命令就可以將影像的二進位資料(不管是甚麼資料都可以)寫入資料庫了!再SQL句型中,@這個記號表示此處要用另外定義的Parameter變數,下面是一個網頁設定產生的SqlDataSource內容,你也會看到很多類似的記號:

最後是殺掉已經不需要的上傳影像檔,並顯示已上傳的檔名。本階段執行畫面大概像這樣:

打開影像表資料可以看到這個樣子,資料確實上傳了!


讀取及顯示影像的程式
雙擊ListBox寫程式如下:

關鍵就是使用Cmd.ExecuteScalar的語法將資料讀進一個Byte陣列,將此資料存檔,恢復它在檔案總管內的身分(影像檔),接著就可以找適當的物件(Image1)使用它了!

重點提示
事實上影像資料或任何特殊的檔案資料都可以使用Byte陣列的方式讀寫,本單元雖然以影像檔為例,但其實處理過程就是將資料變成Byte陣列寫入資料庫,也以Byte陣列讀出,所以如果是音效或影片檔也不過就是最終端呼叫甚麼物件或軟體來檢視或執行它而已!這是本單元最重要的核心概念,學會這個重點甚麼資料都可以自資料庫存取了!