急!有谁知道用vb如何把图片以二进制形势写入oracle数据库

解决方案 »

  1.   

    在vb中的处理方法 
    本程序也可以用oo4o实现下面这段程序将一个文件(文本文件,doc文件,图象文件等)保存到数据库中,并可以将其从数据库读出。需要两个commandbutton
    cmd1 名称 cmdsave caption 保存
    cmd2 名称 cmdread caption 读取
    一个cmddialog控件Option Explicit
    Dim rn As ADODB.ConnectionPublic Function CreateDataSource(DataSource As String, UserID As String, Password As String) As Boolean
    On Error GoTo DbConErr:
    Set rn = New ADODB.Connection
    With rn
    .ConnectionString = "Provider=OraOledb.Oracle.1;" & _
    "password=" & Password & ";" & _
    "User ID =" & UserID & ";" & _
    "Data Source=" & DataSource & ";" & _
    "Locale Identifier=2052"
    .Open
    End With
    CreateDataSource = True
    Exit Function
    DbConErr:
    CreateDataSource = False
    End FunctionPrivate Sub cmdRead_Click()
    Dim rs As New ADODB.Recordset
    rs.ActiveConnection = rn
    rs.LockType = adLockOptimistic
    rs.CursorLocation = adUseClient
    rs.Source = "select * from t_demo"
    rs.Open
    ComDlgDir.DialogTitle = "保存文件"
    ComDlgDir.Filter = "*.*"
    ComDlgDir.ShowSave
    Call BlobToFile(rs.Fields("text"), ComDlgDir.filename)
    Set rs = Nothing
    Exit Sub
    Set rs = Nothing
    End SubPrivate Sub cmdsave_Click()
    Dim rs As New ADODB.Recordset
    rs.ActiveConnection = rn
    rs.LockType = adLockOptimistic
    rs.CursorLocation = adUseClient
    rs.Source = "select * from t_demo"
    rs.Open
    rs.AddNew 
    ComDlgDir.DialogTitle = "选取文件"
    ComDlgDir.ShowOpen 
    rs.Fields("id").Value = 1
    If ComDlgDir.filename <> "" Then
    Call FileToBlob(rs.Fields("text"), ComDlgDir.filename)
    rs.Update
    End If 
    Set rs = Nothing
    Exit Sub
    Set rs = Nothing 
    End SubPrivate Sub Form_Load()
    If Not CreateDataSource("sid", "systemp", "manager") Then
    MsgBox "Connection failure!"
    End If
    End SubSub FileToBlob(ByRef fld As ADODB.Field, filename As String, Optional ChunkSize As Long = 8192)
    Dim fnum As Integer, bytesleft As Long, bytes As Long
    Dim tmp() As Byte
    If (fld.Attributes And adFldLong) = 0 Then
    Err.Raise 1001, , "field doesn't support the GetChunk method."
    End If
    If Dir$(filename) = "" Then Err.Raise 53, , "File not found"
    fnum = FreeFile 
    Open filename For Binary As fnum
    bytesleft = LOF(fnum)
    Do While bytesleft
    bytes = bytesleft
    If bytes > ChunkSize Then bytes = ChunkSize
    ReDim tmp(1 To bytes) As Byte
    Get fnum, , tmp
    fld.AppendChunk tmp
    bytesleft = bytesleft - bytes
    Loop
    Close #fnum
    End SubSub BlobToFile(fld As ADODB.Field, filename As String, Optional ChunkSize As Long = 8192)
    Dim fnum As Integer, bytesleft As Long, bytes As Long
    Dim tmp() As Byte
    If (fld.Attributes And adFldLong) = 0 Then
    Err.Raise 1001, , "field doesn't support the GetChunk method."
    End If
    If Dir$(filename) <> "" Then Kill filename
    fnum = FreeFile
    Open filename For Binary As fnum
    bytesleft = fld.ActualSize
    Do While bytesleft
    bytes = bytesleft
    If bytes > ChunkSize Then bytes = ChunkSize
    tmp = fld.GetChunk(bytes)
    Put #fnum, , tmp
    bytesleft = bytesleft - bytes
    Loop
    Close #fnum
    End Sub
      

  2.   

    请问:
    在Oracle里用BLOB,CLOB,NCLOB有什么区别吗.
    哪个更快,哪个更小.哪个读取效率更高