示範環境:
建立測試資料表:
CREATE TABLE tb_test (
id INT IDENTITY(1,1),
photo IMAGE,
CONSTRAINT pk_tb_test PRIMARY KEY (id)
)
以下範例將 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 型別。FileStream 完整讀入記憶體,適用於中小型檔案;大型檔案建議採用串流分塊寫入。