用image类型方法:
1、建立过程
CREATE PROCEDURE sp_textcopy ( 
  @srvname    varchar (30), 
  @login      varchar (30), 
  @password    varchar (30), 
  @dbname      varchar (30), 
  @tbname      varchar (30), 
  @colname    varchar (30), 
  @filename    varchar (30), 
  @whereclause varchar (40), 
  @direction  char(1)) 
AS 
DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
        'textcopy /S ' + @srvname + 
        ' /U ' + @login + 
        ' /P ' + @password + 
        ' /D ' + @dbname + 
        ' /T ' + @tbname + 
        ' /C ' + @colname + 
        ' /W "' + @whereclause + 
        '" /F ' + @filename + 
        ' /' + @direction 
EXEC master..xp_cmdshell @exec_str  2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2go4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go

解决方案 »

  1.   

    用image类型方法:
    1、建立过程
    CREATE PROCEDURE sp_textcopy ( 
      @srvname    varchar (30), 
      @login      varchar (30), 
      @password    varchar (30), 
      @dbname      varchar (30), 
      @tbname      varchar (30), 
      @colname    varchar (30), 
      @filename    varchar (30), 
      @whereclause varchar (40), 
      @direction  char(1)) 
    AS 
    DECLARE @exec_str varchar (255) 
    SELECT @exec_str = 
            'textcopy /S ' + @srvname + 
            ' /U ' + @login + 
            ' /P ' + @password + 
            ' /D ' + @dbname + 
            ' /T ' + @tbname + 
            ' /C ' + @colname + 
            ' /W "' + @whereclause + 
            '" /F ' + @filename + 
            ' /' + @direction 
    EXEC master..xp_cmdshell @exec_str  2、建表和初始化数据
    create table 表名 (编号 int,image列名 image)
    go
    insert 表名 values(1,0x)    -- 必须的,且不是null
    insert 表名 values(2,0x)    -- 必须的,且不是null
    go3、读入
    sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2go4、读出成文件
    sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
    go如果报textcopy不是可执行文件的话,你就到
    C:\Program Files\Microsoft SQL Server\MSSQL\Binn
    目录下拷备 textcopy.exe到:
    C:\Program Files\Microsoft SQL Server\80\Tools\Binn
      

  2.   

    VB代码如下:'**************************读图片文件**************************************
    Sub GetPicFromDB(cn As ADODB.Connection)
        On Error Resume Next
        Dim fld As Field
        Dim strTemp As String
        Dim stm As ADODB.Stream
        Set stm = New ADODB.Stream
                                          'strTemp = "c:\temp.bmp"
        Set rs1 = New ADODB.Recordset
        rs1.Open "select * from rs_http where htbh='" & frm_manage.Grid2.TextMatrix(frm_manage.Grid2.RowSel, 0) & "'", cn, , , adCmdText
            While Not rs1.EOF
                 '*********将数据库中的文件读到硬盘上*************************
               ' strTemp = App.Path + "\temp\" + rs1!Name '`临时文件,用来保存读出的图片            With stm
                     .Type = adTypeBinary
                     .Open
                     .Write rs1("tp").value
                     strTemp = App.Path & "\temp1\" & rs1!Name
                     .SaveToFile strTemp, adSaveCreateOverWrite
                     .Close
                End With
                Set itemX = lvwPic.ListItems.add(, App.Path & "\temp1\" & rs1!Name, rs1!Name, 1, 1)
                itemX.SubItems(1) = rs1!bz
                rs1.MoveNext
            Wend
        Set stm = Nothing
        rs1.Close
        Set rs1 = Nothing
        End Sub'******************将图片文件保存到数据库中*************************
    Sub SavePicToDb(cn As ADODB.Connection, table1 As String, field1 As String, file1 As String, id1 As String)
            On Error Resume Next
        Dim stm As ADODB.Stream
        Set stm = New ADODB.Stream
        Set rs1 = New ADODB.Recordset
        rs1.Open "select * from " & table1 & " where id = " & id1, cn, adOpenKeyset, adLockOptimistic
        With stm
            .Type = adTypeBinary
            .Open
            .LoadFromFile file1  'DLG.FileName
        End With
        With rs1
             .Fields(field1) = stm.Read
             .Update
        End With
        rs1.Close
        Set rs1 = Nothing
    End Sub
      

  3.   

    如何将图片存进Sql Server?字段类型用Image,编程工具用图形控件关联数据库。
    将图片读进字符数组,将此数组插入表中的image字段
    根据各种语言到相应版面去搜索一下吧。
    楼主也可以试试用SQL Server来编写一个存储过程,通过参数传递image数据类型,并且可以在存储过程中将日志关闭,避免日志溢出,最后在代码里调用存储过程,就可以了。具体细节可以看sqlserver的联机帮助。或者:
    使用 Stream object。微软有提供范例,而且使用对象刚好是SQL Server。微软的Knowledge Base的文章:“Q258038 HOWTO: 使用 ADO Stream 对象访问并修改 SQL Server BLOB 数据”。
     
    给一个用vb调用的例子:
    注:写图片文件到数据库 
        Col为栏位名,ImgFile为要写到数据库的图片文件名,BockSize为每次写多少字节,缺省为每次写8K字节到数据库 
        Public Sub WriteDB(Col As ADODB.Field, ImgFile As String, Optional BlockSize As Long=8192) 
         Dim byteData() As Byte, FileLength As Long, NumBlocks As Integer 
         Dim LeftOver As Long, SourceFileNum As Integer, i As Integer 
         
         SourceFileNum = FreeFile 
         Open ImgFile For Binary As SourceFileNum 
         FileLength = LOF(SourceFileNum) 
         If FileLength > 50 Then 
         NumBlocks = FileLength \ BlockSize 
         LeftOver = FileLength Mod BlockSize 
         
         ReDim byteData(LeftOver) 
         Get SourceFileNum, , byteData() 
         Col.AppendChunk byteData() 
         ReDim byteData(BlockSize) 
         For i = 1 To NumBlocks 
         Get SourceFileNum, , byteData() 
         Col.AppendChunk byteData() 
         Next 
         End If 
         Close SourceFileNum 
        End Sub 
         
         
        ImgFile为从数据库读出数据写到磁盘的文件名,BlockSize为每次向文件写多少个字节,缺省为8K字节,当ReadDB=True,得到图片文件後,可以用LoadPicter(图片文件名)显示图片到PictureBox或Image框中. 
        Public Function ReadDB(Col As ADODB.Field, ImgFile As String,Optional BlockSize As Long=8192) As Boolean 
         Dim byteData() As Byte, NumBlocks As Integer 
         Dim LeftOver As Long, DestFileNum As Integer, i As Integer 
         Dim ColSize As Long 
         
         On Error GoTo ErrRead 
         ReadDB = False 
         
         'If Dir(ImgFile) <> "" Then Kill ImgFile 
         
         DestFileNum = FreeFile 
         Open ImgFile For Binary As #DestFileNum 
         
         ColSize = Col.ActualSize 
         NumBlocks = ColSize \ BlockSize 
         LeftOver = ColSize Mod BlockSize 
         
         ReDim byteData(LeftOver) 
         byteData() = Col.GetChunk(LeftOver) 
         Put DestFileNum, , byteData() 
         ReDim byteData(BlockSize) 
         For i = 1 To NumBlocks 
         byteData() = Col.GetChunk(BlockSize) 
         Put #DestFileNum, , byteData() 
         Next 
         If LOF(DestFileNum) > 200 Then ReadDB = True 
         Close #DestFileNum 
         Exit Function 
         
        ErrRead: 
         MsgBox "READ PICTURE ERR:" & Err.Number 
         ReadDB = False 
         Exit Function 
        End Function//如果ReadDB=False则写文件失败。 
      

  4.   

    '==================================================================--
    '
    ' 用ASP实现无组件上传/下载文件
    '
    ' 功能简介
    ' 将上传的文件数据保存到数据库中,可以处理表单中的多个上传文件的情况
    ' 适用于各种数据库,使用ADO的方法连接数据库
    ' 本示例中使用的是ACCESS数据库:zj.mdb
    ' 表:tb_img(id int(自增列),path text(255) 保存上传文件的目录
    ' ,fname text(250) 保存上传的文件名,img ole对象 保存上传的文件内容
    '   ,type text(250)  保存上传的文件类型
    '
    ' 邹建  2003.10
    '==================================================================
    '==================================================================
    '
    ' 上传文件的HTML页: zj_up.htm
    '
    '==================================================================
    <html>
    <head>
    <title>文件上传保存到数据库中</title>
    </head>
    <body>
    <form name="form1" enctype="multipart/form-data" method="post" action="zj_up.asp">
      <p>
        <input type="file" name="file">
        <input type="submit" name="Submit" value="上传">
      </p>
    </form>
    </body>
    </html>
    '==================================================================
    '
    ' 上传文件保存到数据库的ASP页: zj_up.asp
    '
    '==================================================================
    <%
    Response.Expires=0
    Function f_Bin2Str(ByVal sBin)
        Dim iI, iLen, iChr, iRe       
        iRe = ""
        If Not IsNull(sBin) Then
            iLen = LenB(sBin)
            For iI = 1 To iLen
                iChr = MidB(sBin, iI, 1)
                If AscB(iChr) > 127 Then
                    iRe = iRe & Chr(AscW(MidB(sBin, iI + 1, 1) & iChr))
                    iI = iI + 1
                Else
                    iRe = iRe & Chr(AscB(iChr))
                End If
            Next
        End If    
        f_Bin2Str = iRe
    End Function
    iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _ 
    ";Data Source=" & server.mappath("zj.mdb")
    iSql="tb_img"
    set iRe=Server.CreateObject("ADODB.Recordset")
    iRe.Open iSql,iConcStr,1,3
    iLen=Request.TotalBytes
    sBin=Request.BinaryRead(iLen)
    iCrlf1 = ChrB(13) & ChrB(10)
    iCrlf2 = iCrlf1 & iCrlf1
    iLen = InStrB(1, sBin, iCrlf1) - 1
    iSpc = LeftB(sBin, iLen)
    sBin = MidB(sBin, iLen + 34)
    iPos1 = InStrB(sBin, iCrlf2) - 1
    While iPos1 > 0
    iStr = f_Bin2Str(LeftB(sBin, iPos1))
    iPos1 = iPos1 + 5
    iPos2 = InStrB(iPos1, sBin, iSpc)

    iPos3 = InStr(iStr, "; filename=""") + 12
    If iPos3 > 12 Then
    iStr = Mid(iStr, iPos3)
    iPos3 = InStr(iStr, Chr(13) & Chr(10) & "Content-Type: ") - 2
    iFn = Left(iStr, iPos3)
    If iFn <> "" Then
    iRe.AddNew
    ire("path")=left(iFn,instrrev(iFn,"\"))
    iRe("fname") = mid(iFn,instrrev(iFn,"\")+1)
    iRe("type") = Mid(iStr, iPos3 + 18)
    iRe("img").AppendChunk MidB(sBin, iPos1, iPos2 - iPos1)
    iRe.Update
    End If
    End If

    sBin = MidB(sBin, iPos2 + iLen + 34)
    iPos1 = InStrB(sBin, iCrlf2) - 1
    Wend
    iRe.close
    set iRe=Nothing
    %>'==================================================================
    '
    ' 下载数据的ASP页: zj_down.asp
    '
    '==================================================================
    <%
    Response.Buffer=true
    Response.CleariConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _ 
    ";Data Source=" & server.mappath("zj.mdb")
    set iRe=server.createobject("adodb.recordset")
    iSql="tb_img"
    iRe.open iSql,iconcstr,1,1
    Response.ContentType=ire("type")
    Response.BinaryWrite iRe("img")iRe.close
    set iRe=Nothing
    %>
      

  5.   

    /*--bcp 实现二进制文件的导入导出 支持image,text,ntext字段的导入/导出
    image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等
    text,ntext适合于文本数据文件 注意:导入时,将覆盖满足条件的所有行
    导出时,将把所有满足条件的行导出到指定文件中
    此存储过程仅用bcp实现
    邹建 2003.08-----------------*//*--调用示例
    --数据导出
    exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat'--数据导入
    exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0
    --*/
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_binaryIO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_binaryIO]
    GOCreate proc p_binaryIO
    @servename varchar (30),--服务器名称
    @username varchar (30), --用户名
    @password varchar (30), --密码
    @tbname varchar (500),  --数据库..表名
    @fdname varchar (30),  --字段名
    @fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+_temp
    @tj varchar (1000)='',  --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀
    @isout bit=1 --1导出((默认),0导入
    AS 
    declare @fname_in varchar(1000) --bcp处理应答文件名
    ,@fsize varchar(20) --要处理的文件的大小
    ,@m_tbname varchar(50) --临时表名
    ,@sql varchar(8000)--则取得导入文件的大小
    if @isout=1 
    set @fsize='0'
    else
    begin
    create table #tb(可选名 varchar(20),大小 int
    ,创建日期 varchar(10),创建时间 varchar(20)
    ,上次写操作日期 varchar(10),上次写操作时间 varchar(20)
    ,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)
    insert into #tb
    exec master..xp_getfiledetails @fname
    select @fsize=大小 from #tb
    drop table #tb
    if @fsize is null
    begin
    print '文件未找到'
    return
    endend--生成数据处理应答文件
    set @m_tbname='[##temp'+cast(newid() as varchar(40))+']'
    set @sql='select * into '+@m_tbname+' from(
    select null as 类型
    union all select 0 as 前缀
    union all select '+@fsize+' as 长度
    union all select null as 结束
    union all select null as 格式
    ) a'
    exec(@sql)
    select @fname_in=@fname+'_temp'
    ,@sql='bcp "'+@m_tbname+'" out "'+@fname_in
    +'" /S"'+@servename
    +case when isnull(@username,'')='' then '' 
    else '" /U"'+@username end
    +'" /P"'+isnull(@password,'')+'" /c'
    exec master..xp_cmdshell @sql
    --删除临时表
    set @sql='drop table '+@m_tbname
    exec(@sql)if @isout=1
    begin
    set @sql='bcp "select top 1 '+@fdname+' from ' 
    +@tbname+case isnull(@tj,'') when '' then ''
    else ' where '+@tj end
    +'" queryout "'+@fname
    +'" /S"'+@servename
    +case when isnull(@username,'')='' then '' 
    else '" /U"'+@username end
    +'" /P"'+isnull(@password,'')
    +'" /i"'+@fname_in+'"'
    exec master..xp_cmdshell @sql
    end
    else
    begin
    --为数据导入准备临时表
    set @sql='select top 0 '+@fdname+' into '
    +@m_tbname+' from ' +@tbname
    exec(@sql) --将数据导入到临时表
    set @sql='bcp "'+@m_tbname+'" in "'+@fname
    +'" /S"'+@servename
    +case when isnull(@username,'')='' then '' 
    else '" /U"'+@username end
    +'" /P"'+isnull(@password,'')
    +'" /i"'+@fname_in+'"'
    exec master..xp_cmdshell @sql

    --将数据导入到正式表中
    set @sql='update '+@tbname
    +' set '+@fdname+'=b.'+@fdname
    +' from '+@tbname+' a,'
    +@m_tbname+' b'
    +case isnull(@tj,'') when '' then ''
    else ' where '+@tj end
    exec(@sql) --删除数据处理临时表
    set @sql='drop table '+@m_tbname
    end--删除数据处理应答文件
    set @sql='del '+@fname_in
    exec master..xp_cmdshell @sqlgo
      

  6.   

    更多的参考我的贴子:数据库中存/取文件(zjcxc)
    http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.1157648