首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 圖片二進位資料儲存與讀取完整實作

     編輯:關於SqlServer

前言

SQL Server 提供 image 資料型別專門儲存二進位大物件,如圖片、文件等。本文示範如何在 ASP.NET 環境下,將上傳的圖片儲存至資料庫,並讀取顯示。

資料表設計

欄位名稱資料型別用途
IDInteger識別欄位,主鍵
IMGTITLEVarchar(50)圖片標題
IMGTYPEVarchar(50)MIME 類型(如 image/jpeg)
IMGDATAImage實際二進位資料

前端上傳頁面

建立 Web Form,包含:

  • TextBox:輸入圖片標題
  • HtmlInputFile(File1):選取圖片檔案
  • 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)
  • 務必使用參數化查詢,避免 SQL Injection
  • 儲存 MIME 類型,輸出時設定正確 Content-Type
  • 大量二進位資料建議考慮 FILESTREAM 或檔案系統+資料庫路徑的混合架構
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved