SQL Server 存图片的操作,多人一听就觉得麻烦,其实还挺实用的。尤其是你想统一管理图片资源,又不想搞得前端乱七八糟,这招就派上用场了。文档里讲得还挺细,WinForm 那块也带了代码例子,照着写就能跑,蛮适合练手的。

SQL Server 里的image数据类型,虽然现在多人更推荐用varbinary(max),但文档用的这个依旧能打。像下面这样建个表:

CREATE TABLE Images (
  BLODID int IDENTITY NOT NULL,
  BLOBData image NOT NULL
);

字段设计也挺直白,BLODID自动递增,BLOBData就是你要塞图片的地方。

UI 那块用的是 WinForm,做了个小工具:一个TextBox显示路径,两个按钮,配个OpenFileDialogPictureBox。点“浏览”选图,路径塞进变量filename里:

private string filename = string.Empty;
if (this.openFileDialog1.ShowDialog() == DialogResult.OK) {
  filename = this.openFileDialog1.FileName;
}

点“存储”就把图片转成字节流插进数据库。连接串是写死的(测试用够了),文件读成 byte[]后再配个SqlParameter丢进去:

string picturePath = @"D:\My Documents\My Pictures\000_d74047f595809456636fd470a00f0ff8.jpg";
FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);
Byte[] mybyte = new byte[fs.Length];
fs.Read(mybyte, 0, mybyte.Length);
fs.Close();

SqlParameter prm = new SqlParameter("@blobdata", SqlDbType.VarBinary, mybyte.Length); prm.Value = mybyte; command.Parameters.Add(prm);

检索图片那块没贴代码,但你应该能猜到:查出来 byte[],转成图片,塞进PictureBox。和存储流程刚好反着来。

,这份资源比较适合入门或者做快速 Demo。如果你项目里图片多、访问频繁,建议还是走文件服务器+URL 模式,更灵活也更轻量。

如果你对 BLOB、图片存储还有兴趣,可以看看下面这几个链接,有的是讲Oracle的实现思路,有的是深入讲SQL Server的存储方式:

如果你正好在做 WinForm 的工具类项目,或者在摸索数据库怎么存资源,这份文档可以拿来参考下。