CREATE TABLE tb_test (id INT IDENTITY(1,1), photo IMAGE, CONSTRAINT pk_tb_test PRIMARY KEY(id))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);
}
}
}
VALUES(?) + OleDbParameter 防注入、正確處理二進制。image/varbinary(max) 類型。FileStream.Read 一次性讀入 byte[],小文件適用;大文件建議分塊流式寫入。sqloledb 提供程序,直連 OLEDB 層性能最優。同理使用 SELECT photo FROM tb_test WHERE id=?,ExecuteReader 獲取 OleDbDataReader,GetBytes 讀取流寫入文件。