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

C# 使用 OleDbCommand 讀寫 SQL Server 二進制文件 (image 類型)

     編輯:關於SqlServer

環境準備

  • 服務器:s_test
  • 登錄:sa / 7890
  • 數據庫:db_test
  • 測試表:CREATE TABLE tb_test (id INT IDENTITY(1,1), photo IMAGE, CONSTRAINT pk_tb_test PRIMARY KEY(id))

將本地文件存入數據庫 (C#)

using System;
using System.IO;
using System.Data;
using System.Data.OleDb;

class ImageTest
{
    [STAThread]
    static void Main(string[] args)
    {
        try
        {
            // 1. 初始化連接與命令
            OleDbConnection cn = new OleDbConnection(
                "provider=sqloledb;server=s_test;user id=sa;password=7890;initial catalog=db_test");
            OleDbCommand cmd = new OleDbCommand("INSERT INTO tb_test(photo) VALUES(?)", cn);

            // 2. 讀取文件為位元組陣列
            FileStream fs = new FileStream(@"c:\1.txt", FileMode.Open, FileAccess.Read);
            Byte[] b = new Byte[fs.Length];
            fs.Read(b, 0, b.Length);
            fs.Close();

            // 3. 配置參數
            OleDbParameter prm = new OleDbParameter("@photo", OleDbType.VarBinary, b.Length,
                ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, b);
            cmd.Parameters.Add(prm);

            // 4. 執行
            cn.Open();
            if (cmd.ExecuteNonQuery() == 1)
                Console.WriteLine("OK");
            else
                Console.WriteLine("Fail");
            cn.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

關鍵點解析

  1. 參數化查詢:VALUES(?) + OleDbParameter 防注入、正確處理二進制。
  2. OleDbType.VarBinary:對應 SQL Server image/varbinary(max) 類型。
  3. 文件流讀取:FileStream.Read 一次性讀入 byte[],小文件適用;大文件建議分塊流式寫入。
  4. 連接串:使用 sqloledb 提供程序,直連 OLEDB 層性能最優。

讀取二進制數據

同理使用 SELECT photo FROM tb_test WHERE id=?,ExecuteReader 獲取 OleDbDataReader,GetBytes 讀取流寫入文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved