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

使用 ADO.NET OleDbCommand 更新 SQL Server 二進位檔案完整範例

     編輯:關於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#)

以下範例將 C:\1.txt 儲存至 tb_test 表中:

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

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

            // 讀取檔案至位元組陣列
            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();

            // 設定參數並執行
            OleDbParameter prm = new OleDbParameter("@photo", OleDbType.VarBinary, b.Length,
                ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, b);
            cmd.Parameters.Add(prm);
            cn.Open();

            if (cmd.ExecuteNonQuery() == 1)
                Console.WriteLine("OK");
            else
                Console.WriteLine("Fail");

            cn.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

二、更新資料庫中已儲存的檔案

以下範例將 tb_test 表中 ID=1 的記錄更新為 C:\1.txt:

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

class ImageTest
{
    [STAThread]
    static void Main(string[] args)
    {
        try
        {
            OleDbConnection cn = new OleDbConnection(
                "provider=sqloledb;server=s_test;user id=sa;password=7890;initial catalog=db_test");
            OleDbCommand cmd = new OleDbCommand("UPDATE tb_test SET photo = ? WHERE ID = 1", cn);

            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();

            OleDbParameter prm = new OleDbParameter("@photo", OleDbType.VarBinary, b.Length,
                ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, b);
            cmd.Parameters.Add(prm);
            cn.Open();

            if (cmd.ExecuteNonQuery() == 1)
                Console.WriteLine("OK");
            else
                Console.WriteLine("Fail");

            cn.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

關鍵點總結

  • 使用 OleDbType.VarBinary 對應 SQL Server image 型別。
  • 參數化查詢可有效防止 SQL 注入,並正確處理二進位資料流。
  • 檔案讀取採用 FileStream 完整讀入記憶體,適用於中小型檔案;大型檔案建議採用串流分塊寫入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved