不知道你是什么数据库?如果是access库,可以试试下面的方法:(我以前写过的一篇文章)一、 AppendChunk方法和GetChunk方法
使用 AppendChunk 和 GetChunk 方法可处理包含长二进制或长字符数据的字段值,因此可以利用它们来对数据库中图片类型字段进行操作。
语法:
field.AppendChunk Data
variable = field.GetChunk( Size )
其中:
Data   变体型,其中含有要追加到对象的数据
Size   长整型表达式,等于所要检索的字节或字符数。
现假设有一数据库demo.mdb,表名appendPic,其中“图片”为OLE类型字段。
代码如下:
1、将picname文件导入到数据库中,这里是我们指定的jpg文件
‘声明一个用于存放文件的字节数组
Dim bit() As Byte'将图片文件读入字节数组
Open picname For Binary As #1
ReDim bit(LOF(1)) As Byte
Get 1, 1, bit
Close 1‘打开数据库:demo.mdb
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\demo.mdb;Persist Security Info=False"
cn.Open
Set rs.ActiveConnection = cnrs.Source = "select 图片 from appendPic"rs.LockType = adLockOptimistic
rs.CursorType = adOpenKeyset
rs.Open
'将字节数组存入数据库
rs.AddNew
rs.Fields("图片").AppendChunk bit
rs.Update2、将数据库中“图片”字段的数据导出,生成图形文件appendtmp.jpg。
‘声明文件大小变量
Dim filelng As Longpicname = "appendtmp.jpg"
Open picname For Binary As #1filelng = rs.Fields("图片").ActualSize
‘如果文件大小为0,说明该字段不含图片
If filelng = 0 Then Exit Sub
ReDim bit(filelng) As Byte'将数据库图片读入字节数组
bit() = rs.Fields("图片").GetChunk(filelng)
‘写入临时文件appendtmp.jpg
Put #1, , bit()
‘关闭文件
Close #1二、 使用ADODB的Stream属性
在ADO2.5以后的版本中,提供了Stream,我们可以利用它的read方法和write方法,不过先要引用Microsoft ActiveX Data Objects 2.5 library以上的版本。
仍然使用数据库demo.mdb,新建表名为streamPic,其中“图片”为OLE类型字段。
代码如下:
1、将指定的文件写入数据库
‘声明一个Stream变量
Dim picstream As ADODB.StreamSet picstream = New ADODB.Stream
picstream.Mode = adModeReadWrite
picstream.Type = adTypeBinary
picstream.Open‘载入指定的图形文件
picstream.LoadFromFile picname
‘打开数据库
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\demo.mdb;Persist Security Info=False"
cn.Open
    
Set rs.ActiveConnection = cn
rs.Source = "select 图片 from streamPic"rs.LockType = adLockOptimistic
rs.CursorType = adOpenKeyset
rs.Open
‘利用read方法写入数据库
rs.AddNew
rs.Fields("图片").Value = picstream.Read()
‘关闭stream
picstream.Close
rs.Update
    
2、将数据库中“图片”字段的数据导出,生成图形文件streamtmp.jpg。
‘这里判断字段的大小,如果为0,表明无数据
If rs.Fields("图片").ActualSize <> 0 Then
‘利用write方法导出到文件
    picstream.Write (rs.Fields("图片").Value)
    picstream.SaveToFile App.Path + "\streamtmp.jpg", adSaveCreateOverWrite
    
End If
picstream.Close

解决方案 »

  1.   

    Public Sub SavePic(ByVal pPicPath As String)
        Dim Rs As New ADODB.Recordset
        dim adoCn As New ADODB.Connection
        Dim bytPicData() As Byte
        dim strCn As String
     
        Open pPicPath For Binary As #1
        ReDim bytPicData(LOF(1) - 1)
        Get #1, , bytPicData()
        Close #1    strCn = "Provider=SQLOLEDB.1;User ID=sa;Initial Catalog=databasename;Data Source=Server;Password=;"
        adoCn.Open strCn    Rs.Open "SELECT * FROM dPicture", adoCn, adOpenKeyset, adLockOptimistic
        Rs("PicData").AppendChunk bytPicData()
        Rs.Update    Set Rs = Nothing
    End Sub