如题,
VB代码如下:
    Dim cn As New ADODB.Connection
    Dim MyString As String
    Dim rs As Recordset
    
    cn.ConnectionString = "Provider=SQLOLEDB.1;Initial Catalog=Test;Data Source=.;user id=sa;password="
    cn.Open
    
    cn.Execute "CREATE TABLE [dbo].[vb_test17] ([t1] [int] NULL ,[timage] [ntext] NULL) "
    
    Open "C:\Documents and Settings\Administrator\桌面\vb-program\g.dat" For Input As #1   ' 打开输入文件。
    Do While Not EOF(1)
       Input #1, MyString
    Loop
    Close #1
    
    cn.Execute "INSERT INTO vb_test17 values(1,'" & MyString & "')"
        
    Set rs = cn.Execute("select * from vb_test17")
    rs.MoveFirst    Open "C:\Documents and Settings\Administrator\桌面\vb-program\test17.txt" For Output As #1   ' 打开输入文件。
    Print #1, rs("timage")
    Close #1

解决方案 »

  1.   

    '    其中文件g.dat用WinHEX打开显示如下
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15 FB 15
    '    FB 15 FB 15 FB 15 FB 15
    '
    '    结果我用VB写到Sql Server中, 再次读出来时, 却显示如下
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F
    '    3F 3F 3F 3F OD 0A
    '
    '    请问我该怎样才能读出和原来一样的呢?
      

  2.   

    试试我这段,doc,图片都没有问题
    使用image类型'http://support.microsoft.com/default.aspx?scid=kb;EN-US;258038'*************************************************************************
    '**
    '** 使用 ADODB.Stream 保存/读取文件到数据库
    '** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
    '**
    '** ----- 数据库连接字符串模板 ---------------------------------------
    '** ACCESS数据库
    '** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
    '**     ";Data Source=数据库名"
    '**
    '** SQL数据库
    '** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
    '**     "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
    '**'保存文件到数据库中
    Sub s_SaveFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcStr As String
        
        '数据库连接字符串
        iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=F:\csdn_vb\database\保存图片\img.mdb"
        Dim iConc As ADODB.Connection
        Set iConc = New ADODB.Connection
        
        iConc.Open iConcStr
        '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary    '二进制模式
            .Open
            .LoadFromFile App.Path + "\com.doc"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "select * from img", iConc, 1, 3
            .AddNew         '新增一条记录
            .Fields("photo") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
    End SubSub s_ReadFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConc As String
        
        '数据库连接字符串
        iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=F:\csdn_vb\database\保存图片\img.mdb"
        
        '打开表
        Set iRe = New ADODB.Recordset
        iRe.Open "img", iConc, adOpenKeyset, adLockReadOnly
        iRe.Filter = "id=3"   '比如单击datagrid后找到id=3的纪录
        
        '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe("photo")
            .SaveToFile "c:\com.doc"
        End With
        
            OLE1.SourceDoc = "c:\\com.doc"
            OLE1.Action = 1    'use the old action method
            OLE1.SizeMode = vbOLESizeAuttoSize    '调节对象大小使其正好充满OLE容器控件    'Picture1.Picture = LoadPicture("c:\tesd.bmp")
        
        '关闭对象
        iRe.Close
        iStm.Close
    End SubPrivate Sub Command1_Click()
    Call s_ReadFile
    End SubPrivate Sub Command2_Click()
    Call s_SaveFile
    End Sub
      

  3.   

    to online
    我现在的问题就是想从数据库读,写ntext类型字段。请问如何处理?
      

  4.   

    open    for input 处就错了。在LOOP循环中覆盖了内容。应该是:
    do
    line input #1,a
    mystring=mystring & a & vbcrlf
    loop
      

  5.   

    to online:
    我按照您的方式用Adodb.stream方式从数据库中读取ntext字段的内容,是可以的。非常感谢!
    但是,有一个问题,读出来的内容的开头多了两个字节
    FF FE我试了好几个文件,都出现这种情况,不知道是什么原因。还望明示。再谢!
      

  6.   

    To: online(龙卷风V2.0--再战江湖) 
    您试出来的结果是怎样的?
    会出现多两个字节的情况吗?
      

  7.   

    To:Online
    我刚才在Sql的查询分析器中用
    Select datalength(t2) from vb_test20 
    结果是200字节和g.dat 文件大小的结果一致.
    但是读出来的文件的大小却是202字节
    就是前面多出来的 FF FE 的结果.
      

  8.   

    Up Again
    我是大傻我怕谁.