'    其中文件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
'
'    请问我该怎样才能读出和原来一样的呢?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_test] ([t1] [int] NULL ,[t2] [text] 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_test values(1,'" & MyString & "')"
        
    Set rs = cn.Execute("select * from vb_test")    Open "C:\Documents and Settings\Administrator\桌面\vb-program\test.txt" For Output As #1   ' 打开输入文件。
    Print #1, rs("t2").Value
    Close #1
http://community.csdn.net/Expert/topic/3168/3168544.xml?temp=.7402002

解决方案 »

  1.   

    '你的方法有问题,改用adodb.stream来处理就行了Dim cn As New ADODB.Connection
        
        cn.ConnectionString = "Provider=SQLOLEDB.1;Initial Catalog=Test;Data Source=.;user id=sa;password="
        cn.Open
        
        cn.Execute "CREATE TABLE [dbo].[vb_test] ([t1] [int] NULL ,[t2] [text] NULL) "    Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset    '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary    '二进制模式
            .Open
            .LoadFromFile "C:\Documents and Settings\Administrator\桌面\vb-program\g.dat"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "vb_test", cn, adOpenKeyset, adLockOptimistic
            .AddNew         '新增一条记录
            .Fields("t1") = 1
            .Fields("t2") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
      

  2.   

    转换成Image可能可以,
    但是Image类型的字段不能进行全文检索.
    所以要转换还要转化为别的,
    不知道是否有别的支持这么长的字段?
      

  3.   

    Dim cn As New ADODB.Connection
        
        cn.ConnectionString = "Provider=SQLOLEDB.1;Initial Catalog=Test;Data Source=.;user id=sa;password="
        cn.Open
        
        cn.Execute "CREATE TABLE [dbo].[vb_test] ([t1] [int] NULL ,[t2] [ntext] NULL) "    Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset    '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary    '二进制模式
            .Open
            .LoadFromFile "C:\Documents and Settings\Administrator\桌面\vb-program\g.dat"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "vb_test", cn, adOpenKeyset, adLockOptimistic
            .AddNew         '新增一条记录
            .Fields("t1") = 1
            .Fields("t2") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
      

  4.   

    如果你不能用iamge字段的话改用ntext字段来处理,我测试过的
    但要注意一点,要导入的文件必须是双字节,单字节则会丢失一个字节
    我测试了.gif文件及.xls文件,又字节的保存及还原均没有问题.单字节的出错,出现丢失一个字节的情况.