CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

求救怎样在SQL Server中保存和输出图片

楼主fuyunyouzi(浮云游子)2002-11-10 12:44:51 在 Web 开发 / ASP 提问

求救怎样在SQL   Server中保存和输出图片!(急!!!) 问题点数:100、回复次数:4Top

1 楼fuyunyouzi(浮云游子)回复于 2002-11-10 12:46:41 得分 0

在SQL   Server中保存和输出图片  
   
  cashcho(翻译)    
   
  关键字   SQL   Server   images    
   
  出处   http://www.bipinjoshi.com/    
   
  介绍    
   
    有时候我们需要保存一些binary   data进数据库。SQL   Server提供一个叫做image的特殊数据类型供我们保存binary   data。Binary   data可以是图片、文档等。在这篇文章中我们将看到如何在SQL   Server中保存和输出图片。    
   
  建表  
   
    为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构:  
   
  Column   Name   Datatype   Purpose    
  ID   Integer   identity   column   Primary   key  
     
  IMGTITLE   Varchar(50)   Stores   some   user   friendly   title   to   identity   the   image    
  IMGTYPE   Varchar(50)   Stores   image   content   type.   This   will   be   same   as   recognized   content   types   of   ASP.NET    
   
  IMGDATA   Image   Stores   actual   image   or   binary   data.    
   
  保存images进SQL   Server数据库  
   
    为了保存图片到table你首先得从客户端上传它们到你的web服务器。你可以创建一个web   form,用TextBox得到图片的标题,用HTML   File   Server   Control得到图片文件。确信你设定了Form的encType属性为multipart/form-data。  
   
  Stream   imgdatastream   =   File1.PostedFile.InputStream;  
   
  int   imgdatalen   =   File1.PostedFile.ContentLength;  
   
  string   imgtype   =   File1.PostedFile.ContentType;  
   
  string   imgtitle   =   TextBox1.Text;  
   
  byte[]   imgdata   =   new   byte[imgdatalen];  
   
  int   n   =   imgdatastream.Read(imgdata,0,imgdatalen);  
   
  string   connstr=  
   
  ((NameValueCollection)Context.GetConfig  
   
  ("appSettings"))["connstr"];  
   
  SqlConnection   connection   =   new   SqlConnection(connstr);  
   
  SqlCommand   command   =   new   SqlCommand  
   
  ("INSERT   INTO   ImageStore(imgtitle,imgtype,imgdata)  
   
  VALUES   (   @imgtitle,   @imgtype,@imgdata   )",   connection   );  
   
   
  SqlParameter   paramTitle   =   new   SqlParameter  
   
  ("@imgtitle",   SqlDbType.VarChar,50   );  
   
  paramTitle.Value   =   imgtitle;  
   
  command.Parameters.Add(   paramTitle);  
   
   
  SqlParameter   paramData   =   new   SqlParameter  
   
  (   "@imgdata",   SqlDbType.Image   );  
   
  paramData.Value   =   imgdata;  
   
  command.Parameters.Add(   paramData   );  
   
   
  SqlParameter   paramType   =   new   SqlParameter  
   
  (   "@imgtype",   SqlDbType.VarChar,50   );  
   
  paramType.Value   =   imgtype;  
   
  command.Parameters.Add(   paramType   );  
   
   
  connection.Open();  
   
  int   numRowsAffected   =   command.ExecuteNonQuery();  
   
  connection.Close();  
     
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
   
  {  
   
  string   imgid   =Request.QueryString["imgid"];  
   
  string   connstr=((NameValueCollection)  
   
  Context.GetConfig("appSettings"))["connstr"];  
   
  string   sql="SELECT   imgdata,   imgtype   FROM   ImageStore   WHERE   id   =   "  
   
  +   imgid;  
   
  SqlConnection   connection   =   new   SqlConnection(connstr);  
   
  SqlCommand   command   =   new   SqlCommand(sql,   connection);  
   
  connection.Open();  
   
  SqlDataReader   dr   =   command.ExecuteReader();  
   
  if(dr.Read())  
   
  {  
   
  Response.ContentType   =   dr["imgtype"].ToString();  
   
  Response.BinaryWrite(   (byte[])   dr["imgdata"]   );  
   
  }  
   
  connection.Close();  
   
  }  
     
   
   
    在上面的代码中我们使用了一个已经打开的数据库,通过datareader选择images。接着用Response.BinaryWrite代替Response.Write来显示image文件。  
   
    希望您喜欢这些文章,如有任何意见和建议请致信webmaster@bipinjoshi.com。  
   
  本文转载自中国软件(http://www.csdn.net)。  
  Top

2 楼fuyunyouzi(浮云游子)回复于 2002-11-10 12:48:21 得分 0

这里有点问题呀Top

3 楼babystudio(ABabySoft)回复于 2002-11-10 12:55:06 得分 0

上面有的语句只能再vb桌面程序中应用,而无法再asp中调用。输出图片比较方便  
  Response.ContentType   =   图片类型;  
  Response.BinaryWrite(   图片数据   );  
  就可以了,至于asp中的无组件上传文件方面的文章,网络上现在已经泛滥了,呵呵  
  看看这里  
  http://www.linkmeng.com/article/listart.asp?artid=32Top

4 楼b13(志方)回复于 2002-11-10 13:13:56 得分 100

无组件图片与文本同步存入数据库的最简单的办法!  
   
  一:前言  
   
  首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂。或是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对此有疑问的网友。  
   
  二:准备工作  
   
  按照惯例,我先将我的测试环境告诉大家。  
  系统:Win98se   +   pws   +   asp    
  编程环境:Visual   Interdev   6.0    
  数据库:Access2000   (因为网友问的最多的都是Access2000的问题。)  
  建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。  
  id   |   text1   |   text2   |   img  
  自动编号   文本   文本   OLE对象   ’如果是sql   server   则选择(image即可)  
   
  三:Are   you   ready   ,Go!!!  
   
  3-1.建上传表单:  
  我们知道,图像与文本是两种不同制式的文件(二进制,流式文本)而如果要同一表单提交的话,(file格式提交)则我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格式的文件混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值的函数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。(这种方法很另类但伟人说过白猫,黑猫。能上网的就是好猫!)  
   
  upload.asp(具体代码如下)  
   
  <%   @   language=vbscript   %>  
  <html>  
  <head>  
  <meta   name="VI60_defaultClientScript"   content="VBScript">  
  <title>   File   Upload   </title>  
  <script   ID="clientEventHandlersVBS"   LANGUAGE="vbscript">  
  <!--    
  Sub   form2_onsubmit   //**   这里是关键,当form2在提交的过程中时,即活form1的提交  
  form1.submit   //**所以我们这里用了两个表单,但只用一个提交就可以了。  
  End   Sub  
  -->  
  </script>  
  </head>  
  <body>  
   
  <form   name="form1"   ENCTYPE="multipart/form-data"   ACTION="upimage.asp"   METHOD="POST"   target="_blank">  
  Please   choose   a   picture   to   upload:   <br>  
  <input   NAME="picture"   TYPE="FILE">   <br>  
  </form>  
   
  <form   name="form2"   action="uptext.asp"   method="post">  
  <input   type="text"   name="text1"><br>  
  <input   type="text"   name="text2"><br>  
  <input   type="submit"   value="提交">  
  </form>  
   
  </body>  
  </html>  
   
  3-2   兵分两路来处理数据。  
  首先,文本很简单。  
   
  uptext.asp   (代码如下)  
   
  <%   @   language=vbscript   %>  
  <%  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
   
  text1=request.form("text1")  
  text2=request.form("text2")  
  response.write   text1  
  response.write   text2  
   
  set   rs=Server.CreateObject("adodb.recordset")  
  sql="SELECT   top   1   *   FROM   imgtable   ORDER   BY   id   DESC"   ’这里的意思是选择最后一个Id,既刚刚被改动  
  rs.Open   sql,strconn,1,3   ’就是你上传的图像的两个文本字段。  
   
  rs("text1")=text1   ’注意,这里是改动不是添加,所以不用addnew。  
  rs("text2")=text2  
  rs.Update  
  rs.Close  
  %>  
  接着,来处理图像。  
  upimage.asp   (具体代码如下)  
   
  <%  
  FormSize   =   Request.TotalBytes   ’得到数据  
  FormData   =   Request.BinaryRead(   FormSize   )  
   
  function   ImageUp(formsize,formdata)   ’这个函数的功能是截取其中的图像部分。  
  bncrlf=chrb(13)   &   chrb(10)   ’做成函数后。以后你可以自己随意使用了。  
  divider=leftb(formdata,instrb(formdata,bncrlf)-1)  
  datastart=instrb(formdata,bncrlf&bncrlf)+4  
  dataend=instrb(datastart+1,formdata,divider)-datastart  
  imageup=midb(formdata,datastart,dataend)  
  end   function  
   
  Image=ImageUp   (FormSize,Formdata)   ’这里就是图像部分了。  
   
  set   rs=server.CreateObject("adodb.recordset")  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
  sql="SELECT   *   FROM   imgtable"  
  rs.Open   sql,strconn,1,3  
   
  rs.AddNew   ’因为表单二在表单一提交的过程中下提交了。  
  rs("img").appendchunk   Image   ’所以这里是添加。  
  rs.Update  
  rs.Close  
   
   
  response.contenttype="image/gif"    
  response.binarywrite   imageup(formsize,formdata)   ’这里是显示图像。表示成功!  
   
  %>  
   
  啊?!?!原来如此简单!  
   
  四:“显示,我要同页显示”  
  终于完成了图文同步提交。(真的是同步吗?不是吗?是吗?   唉,我们只是为了解决问题。何必当真哪?不是   吗?)  
  现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。  
   
  主页面:show.asp  
   
  <%@   Language=VBScript   %>  
  <%    
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
   
  set   rs=Server.CreateObject("adodb.recordset")  
  sql="SELECT   top   1   *   FROM   imgtable   ORDER   BY   id   DESC"  
  rs.Open   sql,strconn,1,3  
  %>  
  <html>  
  <body>  
  以下是你的上传资料。<br>  
  文本一:<%   Response.Write   rs("text1")   %><br>  
  文本二:<%   Response.Write   rs("text2")   %><br>  
   
  你的图像:  
  <img   src=showimg.asp?id=<%=rs("id")%>>   ’注意这里,这才是关键。他可以实现网页图像与文本  
  </body>   ’共存。    
  </html>  
   
  幕后页面:showimg.asp   (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)  
   
  <%@   Language=VBScript   %>  
  <%  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
  id=Request("id")  
  set   rs=server.CreateObject("adodb.recordset")  
  sql="SELECT   *   FROM   imgtable   where   id="&id  
  rs.Open   sql,strconn,1,3  
  response.contenttype="image/gif"  
  Response.BinaryWrite   rs("img")  
  %>Top

相关问题

  • 字段输出问题,SQL Server中Text字段输出问题
  • 怎么把sql数据库中的数据输出到excel中保存?
  • 怎样保存图象到sql server中
  • SQL Server保存空格的问题
  • 如何保存触发器(SQL Server 2000)
  • SQL Server SQL语句中字符串怎么格式化输出?
  • SQL SERVER存储过程如何输出RecordSet到输出参数中?
  • 如何将商品的编码:如:00001;02001保存到sql输出后还是00001和02001
  • 为什么我用asp查询sql server输出的是乱码??
  • 用shell变量保存命令输出。

关键词

得分解答快速导航

  • 帖主:fuyunyouzi
  • b13

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo