SQL Server 提供 image 資料型別專門儲存二進位大物件,如圖片、文件等。本文示範如何在 ASP.NET 環境下,將上傳的圖片儲存至資料庫,並讀取顯示。
| 欄位名稱 | 資料型別 | 用途 |
|---|---|---|
| ID | Integer | 識別欄位,主鍵 |
| IMGTITLE | Varchar(50) | 圖片標題 |
| IMGTYPE | Varchar(50) | MIME 類型(如 image/jpeg) |
| IMGDATA | Image | 實際二進位資料 |
建立 Web Form,包含:
encType="multipart/form-data"// 取得上傳檔案資訊
Stream imgDataStream = File1.PostedFile.InputStream;
int imgDataLen = File1.PostedFile.ContentLength;
string imgType = File1.PostedFile.ContentType;
string imgTitle = TextBox1.Text;
// 讀取二進位資料
byte[] imgData = new byte[imgDataLen];
imgDataStream.Read(imgData, 0, imgDataLen);
// 連線字串從 Web.config 讀取
string connStr = ConfigurationManager.AppSettings["connstr"];
// 參數化查詢防止 SQL Injection
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(
"INSERT INTO ImageStore (imgtitle, imgtype, imgdata) VALUES (@title, @type, @data)", conn))
{
cmd.Parameters.Add("@title", SqlDbType.VarChar, 50).Value = imgTitle;
cmd.Parameters.Add("@type", SqlDbType.VarChar, 50).Value = imgType;
cmd.Parameters.Add("@data", SqlDbType.Image).Value = imgData;
conn.Open();
cmd.ExecuteNonQuery();
}
// Generic Handler (ImageHandler.ashx) 或頁面 Page_Load
string id = Request.QueryString["id"];
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(
"SELECT imgtype, imgdata FROM ImageStore WHERE ID = @id", conn))
{
cmd.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(id);
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
Response.ContentType = dr["imgtype"].ToString();
Response.BinaryWrite((byte[])dr["imgdata"]);
}
}
}
<img src="ImageHandler.ashx?id=1" alt="資料庫圖片" />
image 型別儲存二進位資料(最大 2 GB)Content-TypeFILESTREAM 或檔案系統+資料庫路徑的混合架構