zoukankan      html  css  js  c++  java
  • [转]在mssql中的表中有image字段,如何插入圖片?

      用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  
      go  
       
      3、读入  
      sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where   编号=1','I'   --注意条件是   编号=1  
       
      sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where   编号=2','I'   --注意条件是   编号=2  
       
      go  
       
      4、读出成文件  
      sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where   编号=1','O'   --注意条件是   编号=1  
       
      sp_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  


    BCP方式:  
       
      /*--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]  
      GO  
       
      Create   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  
      end  
       
      end  
       
      --生成数据处理应答文件  
      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   @sql  
       
      go  
  • 相关阅读:
    为了抓包某APP所做的尝试(to be continued)
    VirtualBox的使用的一些Tips 网络配置|硬盘扩充
    斜线和反斜线简要历史,为什么windows和unix采用不同的路径分隔符
    求出二维数组主对角线、次对角线以及周边元素之和
    C#计算两个时间的时间差,精确到年月日时分秒
    C#获取MP3,WMA信息
    C#窗体随意移动
    DEV GridControl小结
    DEV 皮肤的使用
    C#窗体阴影
  • 原文地址:https://www.cnblogs.com/daxia/p/972388.html
Copyright © 2011-2022 走看看