我想向SQL Server2000数据库存入文件?我所知道的就是有个image格式可以存入文件,但是能支持的格式似乎很少,如.DOC, .JPG, .GIF。在此我向大家咨询一下,如何保存更多格式的文件,最好是能存入任何格式的。目前的需求就是要存入CAD文件,如dwg,dxf等格式的文件,遇到了难题。希望能给一个insert进和select出的例子。
我是用delphi开发的。希望能帮忙说说,谢谢!

解决方案 »

  1.   

    方法:
    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.   


    --转贴自大力--*/--建立存取处理的存储过程
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_textcopy]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[sp_textcopy]
    GOCREATE 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) --I 为存储到数据库,O 从数据库中读出成文件
    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  
    go--调用示例:
    --1.创建示例表和初始化数据
    create table tb(id int,img image)
    insert tb 
    select 1,0x
    union all select 2,0x
    go--2.将文件保存到数据库中
    declare @srv varchar(255),@db sysname,@tb sysname,@col sysname
    select @srv=@@servername --服务器名
    ,@db=db_name() --数据库名
    ,@tb='tb' --表名
    ,@col='img' --列名
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','I' --保存到id=1的记录中,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','I' --保存到id=2的记录中,注意条件是:id=2--3.从数据库中读出保存为文件
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.jpg','where id=1','O' --读出id=1的记录,注意条件是:id=1
    sp_textcopy @srv,'sa','sa的密码',@db,@tb,@col,'c:\test.doc','where id=2','O' --读出id=2的记录,注意条件是:id=2--删除测试环境
    drop table tb
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_textcopy]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[sp_textcopy]
      

  3.   

    上楼的兄弟,出现error啊:'textcopy' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    NULL
      

  4.   

    C:\Program Files\Microsoft SQL Server\MSSQL\Binn
    目录下拷备 textcopy.exe到:
    C:\Program Files\Microsoft SQL Server\80\Tools\Binn
      

  5.   

    我向用web servcie来提供信息服务,如果存储文件路径可能会为这个东西的发布带来麻烦,因此最好保存在数据库里比较方便点。虽然我知道这样会带来性能上的降低。
      

  6.   

    hugoon(MyServices) ( ) 信誉:100    Blog   加为好友  2007-04-08 10:06:06  得分: 0  
     
     
       数据库里面的表压根就没有保存成功
      
     
    在安装目录下搜索
    textcopy.exe
    以上路径为默认安装路径下的
    楼主是不是安装时改过路径?
      

  7.   

    这一步初始化数据是必须做的
    --调用示例:
    --1.创建示例表和初始化数据
    create table tb(id int,img image)
    insert tb 
    select 1,0x
    union all select 2,0x
      

  8.   

    to:roy_88(中国风_燃烧你的激情!!!) 我是改了路径的,改在D盘安装的。
    您这个是不是可以保存任何格式的文件的呢?
      

  9.   


    在Binn找到textcopy.exe
    复制到
    80\Tools\Binn如.DOC, .JPG, .GIF
    以上三种都是可以了
      

  10.   

    好,我试试。image本身似乎就可以直接保存这些格式的。
    要是能保存其他图格式(如dwg,dxf格式)的就好了。
      

  11.   

    结合delphi开发就好办,
    2000数据库建image格式,然后用ADOQuery。TBlobField(ADOQuery1.FieldByName('文件内容')).LoadFromFile('C:\abc.dwg');