sqlserver 插入图片

本文介绍如何在 SQL Server 的不同版本中将图片数据插入到包含 image 类型字段的表中。对于 2005 及以上版本,可以直接使用 T-SQL 语句结合 openrowset 函数完成插入操作;而对于 2000 版本,则需通过 textcopy 工具先插入一条空白记录再进行图片数据的填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一张表,定义如下:

create table dbo.t_image(
	id	int,
	name	image
)

想插入一条记录到表中: (1, D:\1.jpg) 

 

2005以上版本方法如下:

insert into dbo.t_image(id, name) select '1', BulkColumn from openrowset(bulk N'D:\1.jpg', single_blob) as blob

2000:

    需要借助2000自带的工具:"textcopy.exe"来实现

    这个工具在SQLServer安装目录:MSSQL\Binn 中

    1) 先往表中插入一条数据,但是注意:image字段不能为空

insert into t_image values(1, '')

    2) 使用"textcopy.exe" 命令插入图片

C:\SQL2KSP4\x86\binn>textcopy.exe /S  /U sa /P sasa /D testdb3 /T t_image /C name /W "where id=1" /F "D:\1.jpg"

  

  

 

### C# 中将图片插入SQL Server 数据库 为了实现这一功能,在 WinForms 应用程序中可以通过 `SqlCommand` 对象执行参数化查询来完成操作。下面展示了一个完整的例子,该实例展示了如何创建一个简单的 Windows Forms 应用来加载并保存图像文件至 SQL Server 的 BLOB 字段。 #### 创建数据库表结构 首先定义用于存储二进制大对象(BLOB)类型的表格: ```sql USE MyDatabase; GO IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Images') DROP TABLE Images; GO CREATE TABLE Images ( ImageID INT IDENTITY(1,1) PRIMARY KEY, FileName NVARCHAR(255), FileData VARBINARY(MAX) ); ``` 此脚本会删除已存在的名为 "Images" 表格(如果存在),接着新建一张具有两个字段的新表:"FileName"(文件名字符串),以及 "FileData"(实际的二进制数据)[^2]。 #### 编写 C# 代码以上传图片 接下来编写一段 C# 程序片段,它允许用户选择本地磁盘上的某个图形文件并通过 ADO.NET 将其内容发送给上述提到的数据表内: ```csharp using System; using System.Data.SqlClient; using System.IO; using System.Windows.Forms; public partial class MainForm : Form { private void btnUpload_Click(object sender, EventArgs e){ using OpenFileDialog openFileDialog = new(); if(openFileDialog.ShowDialog() == DialogResult.OK){ string filePath = openFileDialog.FileName; byte[] fileBytes; using(FileStream fs = new FileStream(filePath FileMode.Open, FileAccess.Read)){ BinaryReader br = new BinaryReader(fs); fileBytes = br.ReadBytes((int)fs.Length); } InsertImageToDB(Path.GetFileName(filePath), fileBytes); } } public static void InsertImageToDB(string fileName, byte[] imageData){ const string connectionString = @"Server=.\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;"; const string insertQuery = @" INSERT INTO dbo.Images (FileName, FileData) VALUES (@fileNameParam, @fileDataParam)"; try{ using SqlConnection conn = new(connectionString); using SqlCommand cmd = new(insertQuery, conn); SqlParameter paramFilename = new("@fileNameParam", System.Data.SqlDbType.NVarChar){ Value = fileName }; SqlParameter paramImageData = new("@fileDataParam", SqlDbType.VarBinary, -1){ Value = imageData }; cmd.Parameters.Add(paramFilename); cmd.Parameters.Add(paramImageData); conn.Open(); int rowsAffected = cmd.ExecuteNonQuery(); MessageBox.Show($"{rowsAffected} row(s) inserted successfully."); }catch(Exception ex){ MessageBox.Show($"Error occurred while inserting data into database:\n{ex.Message}"); } } } ``` 这段代码实现了打开对话框让用户挑选要上载的照片;一旦选择了有效的路径,则通过流的方式读取整个文件作为字节数组,并调用辅助函数 `InsertImageToDB()` 来处理后续逻辑[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duanbeibei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值