没用过oracle。试试下面代码。其实什么数据库都一样。
Dim conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
conn.Open "************"
rs.Open "tablename", conn, 3,3
  rs.AddNew
  Dim adoStream As New ADODB.Stream
  adoStream.Type = adTypeBinary
  adoStream.Open
  adoStream.LoadFromFile "c:\myphoto.jpg"
  '将二进制文件写入大字段:
  Rs.Fields.Item(0).AppendChunk adoStream.Read
  rs.Update
  '================================
  '从大字段读取二进制数据:
  Dim TempFileName As String
  TempFileName = "c:\temp.jpg"
  adoStream.Write adoRecordset.Fields.Item(0).GetChunk(adoRecordset.Fields.Item(0).ActualSize)
  adoStream.SaveToFile TempFileName, IIf(Len(Trim(Dir(TempFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)

解决方案 »

  1.   

    看这个行不行
    Private Function DatabaseToFile(ByVal DataField As ADODB.Field, ByVal vSaveAs As String, ByVal vFileExpendName As String) As String
    Dim fnum As Long, bytesleft As Long, bytes As Long
    Dim lSumSize As Long, lNowSize As Long
    Dim tmp() As Byte
        On Error GoTo ErrHandleDatabaseToFile
        If Trim(vSaveAs) = "" Then
            DatabaseToFile = GetTempFileName(vFileExpendName)
        Else
            DatabaseToFile = Trim(vSaveAs)
        End If
        
        fnum = FreeFile
        Open (DatabaseToFile) For Binary As fnum
        bytesleft = DataField.ActualSize
        
        lSumSize = CLng(bytesleft / 8192)
        
        Do While bytesleft
            bytes = bytesleft
            If bytes > 8192 Then bytes = 8192
            tmp = DataField.GetChunk(bytes)
            Put #fnum, , tmp
            bytesleft = bytesleft - bytes
            lNowSize = lNowSize + 1
            RaiseEvent TransmitData(lNowSize, lSumSize, False)
        Loop
        Close #fnum
        Exit Function
    ErrHandleDatabaseToFile:
        DatabaseToFile = ""
        Err.Clear
    End FunctionPrivate Function FileToDatabase(ByVal vDataField As ADODB.Field, ByVal vFileName As String)
    Dim fnum As Long, bytesleft As Long, bytes As Long
    Dim lSumSize As Long, lNowSize As Long
    Dim tmp() As Byte
        On Error GoTo ErrHandleFileToDatabase
        
        fnum = FreeFile
        Open vFileName For Binary As fnum
        bytesleft = LOF(fnum)
        lSumSize = CLng(bytesleft / 8192)
        Do While bytesleft
            bytes = bytesleft
            If bytes > 8192 Then bytes = 8192
            ReDim tmp(1 To bytes) As Byte
            Get #fnum, , tmp
            vDataField.AppendChunk tmp
            bytesleft = bytesleft - bytes
            lNowSize = lNowSize + 1
            DoEvents
            RaiseEvent TransmitData(lNowSize, lSumSize, True)
        Loop
        
        Close #fnum
        
        Exit Function
    ErrHandleFileToDatabase:
        Err.Clear
    End Function
      

  2.   

    set gs=server.createobject("adodb.recordset")
    gs.open "select Photo from photolist where id = " & cint(Request.QueryString("id")),strconn,1,1
    with gs
    if not .eof then
    if not isnull(.Fields(0)) then
    Response.ContentType ="image/pjpeg"
    Response.BinaryWrite .Fields(0)
    end if
    end if
    .close
    end with
    set gs = nothing
      

  3.   

    呵呵,上面是asp的代码。我不会vb.
      

  4.   

    回 boybluesky(boybluesky) :
       你使用的oracle是什么版本的?