存储过程中的二进制图片数据转换为图片文件

本文介绍了如何在存储过程中将数据库中二进制格式的图片数据转换成实际的图片文件。提供了两种方法,一种是通过VB代码实现,另一种是使用SQL存储过程。这两种方法分别演示了如何从数据库读取二进制数据并保存为本地文件。

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

问题

    现在旧库中表A有一个字段是存放图片的,但是字段类型是二进制的。在进行数据迁移的时候,在新库表A里面是放图片文件的名称以及存放路径。所以在迁移的时候需要将二进制图片数据转换成文件。

由于数据迁移是在存储过程中做的,那么在存储过程中如何实现这个功能呢? 

----------------------------------------------------------------------------------------------
方法一VB code:

Public filePath As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mst As ADODB.Stream
Private Sub DataGrid1_DblClick()
  If MsgBox("是否接收【" & DataGrid1.Columns(3).Text & "】传送来的『" & DataGrid1.Columns(1).Text & "』吗?", vbQuestion + vbYesNo) = vbYes Then
     CommonDialog1.fileName = DataGrid1.Columns(8).Text
     CommonDialog1.ShowSave
     filePath = CommonDialog1.fileName
     Me.MousePointer = 11
     Set cn = New ADODB.Connection
         cn.ConnectionString = PublicStr
         cn.Open
     Set rs = New ADODB.Recordset
         rs.Open "select * from tbOA_file where file_id='" & frmFile_incept.adoFile.Recordset.Fields(0).Value & "'", cn, adOpenStatic, adLockOptimistic
     Set mst = New ADODB.Stream
         mst.Type = adTypeBinary
         mst.Open
         mst.Write rs.Fields(7).Value
         mst.SaveToFile filePath, adSaveCreateOverWrite  '保存文件,adSaveCreateOverWrite为覆盖以存在文件
     rs.Close
     cn.Close
     Me.MousePointer = 0
     MsgBox "现在成功! " & "文件保存在: " & frmFile_incept.filePath, vbInformation, "文件下载"
  End If
End Sub

 --------------------------------------------------------------------------------------------------------------

方法二 存储过程SQL code:

create PROCEDURE sp_textcopy ( 
  @srvname    varchar (30), 
  @login      varchar (30), 
  @password    varchar (30), 
  @dbname      varchar (30), 
  @tbname      varchar (30), 
  @photoname    varchar (30), 
  @filename    varchar (30), 
  @whereclause varchar (40), 
  @direction  char(1)) 
AS 
DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
         'textcopy /S  ' + @srvname + 
         ' /U  ' + @login + 
         ' /P  ' + @password + 
         ' /D  ' + @dbname + 
         ' /T  ' + @tbname + 
         ' /C  ' + @photoname + 
         ' /W " ' + @whereclause + 
         '" /F  ' + @filename + 
         ' / ' + @direction 
EXEC master..xp_cmdshell @exec_str ,no_output 

create table photo(id int identity(1,1),photo image,memo nvarchar(50) default  'my photo ')
go
insert photo(photo) values(0x)    -- 必须的,且不是null
select * from photo
--truncate table photo

sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/myphoto/roy3.jpg ', 'where id=5 ', 'I ' --注意条件是 id=1


3、读入
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/photo/21.jpg ', 'where id=1 ', 'I ' --注意条件是 id=1
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/photo/33.jpg ', 'where id=2 ', 'I ' --注意条件是 id=2

go

4、读出成文件
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/roy.jpg ', 'where id=1 ', 'O ' --注意条件是 id=1
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/roy1.jpg ', 'where id=2 ', 'O '
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/roy2.jpg ', 'where id=3 ', 'O '
sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:/photo/roy3.jpg ', 'where id=4 ', 'O '

sp_textcopy  'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'c:/bb.doc ', 'where id=5 ', 'O ' --注意条件是 id=2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值