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

在 SQL Server 2000 中儲存與讀取圖片 (C# 完整範例)

     編輯:關於SqlServer

前言

SQL Server image 資料類型可儲存二進位大型物件 (BLOB),常用於儲存圖片、文件。本文提供完整的資料表結構、C# WinForms 程式碼示範如何將圖片寫入資料庫並讀取顯示。

資料庫準備

CREATE DATABASE EzoneDb;
GO
USE EzoneDb;
GO
CREATE TABLE [Images] (
    [ImageID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Description] [nvarchar](100) NULL,
    [ImageFile] [image] NULL,
    [ImageSize] [int] NULL,
    [ImageType] [nvarchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
GO

C# 核心程式碼

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Drawing;
using System.Windows.Forms;

public class ImageManager
{
    private readonly string _connStr = "Data Source=.;Initial Catalog=EzoneDb;User ID=sa;Password=;";

    // 儲存圖片
    public void SaveImage(string description, string filePath)
    {
        byte[] imageData = File.ReadAllBytes(filePath);
        string mimeType = GetMimeType(Path.GetExtension(filePath));

        using (SqlConnection conn = new SqlConnection(_connStr))
        using (SqlCommand cmd = new SqlCommand(
            "INSERT INTO Images (Description, ImageFile, ImageSize, ImageType) VALUES (@Desc, @Img, @Size, @Type)", conn))
        {
            cmd.Parameters.AddWithValue("@Desc", description);
            cmd.Parameters.AddWithValue("@Img", imageData);
            cmd.Parameters.AddWithValue("@Size", imageData.Length);
            cmd.Parameters.AddWithValue("@Type", mimeType);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }

    // 讀取圖片並回傳 Image 物件
    public Image LoadImage(int imageId)
    {
        using (SqlConnection conn = new SqlConnection(_connStr))
        using (SqlCommand cmd = new SqlCommand(
            "SELECT ImageFile, ImageType FROM Images WHERE ImageID = @Id", conn))
        {
            cmd.Parameters.AddWithValue("@Id", imageId);
            conn.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    byte[] imgBytes = (byte[])reader["ImageFile"];
                    using (MemoryStream ms = new MemoryStream(imgBytes))
                    {
                        return Image.FromStream(ms);
                    }
                }
            }
        }
        return null;
    }

    private string GetMimeType(string ext)
    {
        switch (ext.ToLower())
        {
            case ".jpg": case ".jpeg": return "image/jpeg";
            case ".png": return "image/png";
            case ".gif": return "image/gif";
            case ".bmp": return "image/bmp";
            default: return "application/octet-stream";
        }
    }
}

使用範例

var mgr = new ImageManager();
// 存圖
mgr.SaveImage("產品照片", @"C:\Photos\product.jpg");
// 取圖並顯示於 PictureBox
pictureBox1.Image = mgr.LoadImage(1);

注意事項

  • image 類型在 SQL Server 2005+ 已被 varbinary(max) 取代,新專案建議使用後者。
  • 大量/大檔案建議採用 FILESTREAM 或檔案系統儲存路徑,資料庫僅存路徑。
  • 參數化查詢防止 SQL 注入,並正確處理二進位資料。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved