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:\图片.avi','where 编号=1','I' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.wav','where 编号=2','I' --注意条件是 编号=2go4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.avi','where 编号=1','O' --注意条件是 编号=1sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.wav','where 编号=2','O' --注意条件是 编号=2
go把image列清空:update 表 set 列=null

解决方案 »

  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)
    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
      

  2.   

    两位老兄老拿这个吓唬人,我可要用insert语句呀
      

  3.   

    一般的解决是在程序中处理.楼主可以参考我的贴子:
    数据库中存/取文件(zjcxc)
    http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.589184
      

  4.   

    create table t1(a char(4))
    insert t1 values('图片')
    哈哈,开个玩笑既然不喜欢上面的方式,能不能考虑只存图版的文件名呢?
      

  5.   

    insert 放文件路径吧,方便又高效
      

  6.   

    必须再数据库中存放图片本身
    我事先是可以得到图片的二进制数据的
    曾考虑到先把图片的二进制数据转化成base64编码存到数据库中,但这样一来,我的图片数据就不能为别的程序使用。所也我还是决定存放图片原来的二进制数据,又必须用insert语句(原来做那个系统的时候没有考虑二进制数据,只有字符串和数字)来实现,所以有此一问的
      

  7.   

    ADO的appendchunck操作?!太久远,记不太清了。
      

  8.   

    Set ADOFld = rs1("照片")
        Call SaveToDB(ADOFld, Filename)
        rs1.UpdatePrivate Sub SaveToDB(ByRef Fld As ADODB.field, DiskFile As String)
    Dim byteData() As Byte '定义数据的类型
    Dim NumBlocks As Long '定义数据的大小
    Dim FileLength As Long '定义文件长度
    Dim LeftOver As Long '定义剩余字节长度
    Dim SourceFile As Long '定义自由文件
    Dim i As Long '定义循环变量    SourceFile = FreeFile '提供一个尚未使用的文件?
        Open DiskFile For Binary Access Read As SourceFile '打开文件
        FileLength = LOF(SourceFile) '得到文件长度
        If FileLength = 0 Then '判断文件是否存在
           Close SourceFile
           MsgBox DiskFile & " 文 件 没 内 容 或 不 存 在 !"
        Else
           NumBlocks = FileLength \ BLOCKSIZE '得到数据块的个数
           LeftOver = FileLength Mod BLOCKSIZE '得到剩余字节数
           Fld.Value = Null
           ReDim byteData(BLOCKSIZE) '重新定义数据块的大小
           For i = 1 To NumBlocks
             Get SourceFile, , byteData() '將信息存入
             Fld.AppendChunk byteData() '加载FLD
           Next i
           ReDim byteData(LeftOver) '重新定义数据块的大小
           Get SourceFile, , byteData() '將信息存入
           Fld.AppendChunk byteData() '加载FLD
           Close SourceFile '关闭源文件
        End If
    End Sub
      

  9.   

    既然程序中,没必要一定要用insert语句吧?
    '*************************************************************************
    '**
    '** 使用 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:\My Documents\客户资料1.mdb"
        
        '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary    '二进制模式
            .Open
            .LoadFromFile "c:\test.doc"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "表", iConc, adOpenKeyset, adLockOptimistic
            .AddNew         '新增一条记录
            .Fields("保存文件内容的字段") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
    End Sub'从数据库中读取数据,保存成文件
    Sub 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=\\xz\c$\Inetpub\zj\zj\zj.mdb"
        
        '打开表
        Set iRe = New ADODB.Recordset
        iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
        iRe.Filter = "id=64"
        
        '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe("img")
            .SaveToFile "c:\test.doc"
        End With
        
        '关闭对象
        iRe.Close
        iStm.Close
    End Sub
      

  10.   

    用insert真的不行.要不你这样考虑,将存储也改为存储过程处理,例如:create  proc p_insert @img image
    as
    insert into tb_img values(@img)
    go
      

  11.   

    to 五星上将(大力)您真牛B,最近在忙什么呢?
      

  12.   

    'textcopy' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    NULL
      

  13.   

    to  楼上:如果报textcopy不是可执行文件的话,你就到
    C:\Program Files\Microsoft SQL Server\MSSQL\Binn
    目录下拷备 textcopy.exe到:
    C:\Program Files\Microsoft SQL Server\80\Tools\Binn
      

  14.   

    严重的完全的彻底的同意pengdali(大力 V3.0) !!!
      

  15.   

    不能?在网上搜一搜怎么在delphi中存取jpg图片,可能会有帮助,怎么会不能那,想不通。