用户操作
[即时聊天] [发私信] [加为好友]
陈甲旭ID:nytcjsj
489次访问,排名2万外好友0人,关注者0
做自己爱做的!
nytcjsj的文章
原创 8 篇
翻译 0 篇
转载 0 篇
评论 0 篇
最近评论
文章分类
    收藏
      相册
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 如何在ASP.Net 中把图片存入数据库收藏

      新一篇: 在Asp.Net中从sqlserver检索(retrieve)图片 | 旧一篇: ASP.NET中树形图的实现

      介绍

         可能有很多的时候,我们急需把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。

        在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。

        在这篇文章中我们可以学到以下几个方面的知识:

      1.     插入图片的必要条件

      2.     使用流对象

      3. 查找准备上传的图片的大小和类型

      4.怎么使用InputStream方法?

       

      插入图片的必要条件

      在我们开始上传之前,有两件重要的事我们需要做:

      #Form 标记的 enctype 属性应该设置成 enctype="multipart/form-data"

      # 需要一个表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象

      把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。

      # 需要至少含有一个图片类型的字段的表

      # 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。

      现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的Onclick事件里,我们需要读取选取图片的内容,然后把它存入到表里。那我们先来看看这个Onclick事件。

      提交按钮的Onclick事件的代码:

       

      Dim intImageSize As Int64
           Dim strImageType As String
           Dim ImageStream As Stream

          ' Gets the Size of the Image
          intImageSize = PersonImage.PostedFile.ContentLength

          ' Gets the Image Type
          strImageType = PersonImage.PostedFile.ContentType

          ' Reads the Image
          ImageStream = PersonImage.PostedFile.InputStream

          Dim ImageContent(intImageSize) As Byte
          Dim intStatus As Integer
          intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

          ' Create Instance of Connection and Command Object
          Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
          Dim myCommand As New SqlCommand("sp_person_isp", myConnection)

          ' Mark the Command as a SPROC
          myCommand.CommandType = CommandType.StoredProcedure

          ' Add Parameters to SPROC
          Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)
          prmPersonImage.Value = ImageContent
          myCommand.Parameters.Add(prmPersonImage)

          Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
          prmPersonImageType.Value = strImageType
          myCommand.Parameters.Add(prmPersonImageType)

          Try
              myConnection.Open()
              myCommand.ExecuteNonQuery()
              myConnection.Close()
              Response.Write("New person successfully added!")
          Catch SQLexc As SqlException
              Response.Write("Insert Failed. Error Details are: " & SQLexc.ToString())
          End Try

       

      这是怎么工作的呢?
      PersonImage是HTMLInputFile控件的对象。首先需要获得图片的大小,可以使用下面的代码实现:

      intImageSize = PersonImage.PostedFile.ContentLength

      然后返回图片的类型使用ContenType属性。最后,也是最重要的事就是取得Image Stream,这可以用以下代码实现:

      ImageStream = PersonImage.PostedFile.InputStream

      我们需要一个字节型数组来存储image 内容。读取整个图片可以使用Stream对象的Read方法来实现。Read(in byte[] buffer,int offset,int count)方法有三个参数。【关于Read方法的详细可以参看.Net FrameWorkSDK】他们是:

      buffer

      字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换。

      offset

      buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。

      count

      要从当前流中最多读取的字节数。

      这个Read方法用以下代码实现:
      intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
      .

      现在,我们已经读取了整个图片的内容,下一步,我们要把这些内容存入到sql 表。我们将使用存储过程来完成插入图片类型和图片内容到sql 表。如果你浏览了上面的代码,你将会发现我们使用了sqldbtype.image的数据类型(datatype)。Ok了,完成了这些,我们也就成功的把图片存入到SqlServer中了。下面是我们编写的aspx页面。

      结论

      我们已经讨论了如何把图片存入到Sql Server,那么我们如何从SqlServer中读取图片呢?可以参看另一篇文章:在Asp.Net中从SqlServer中检索图片。
       

      发表于 @ 2008年03月14日 22:23:00|评论(loading...)|编辑

      新一篇: 在Asp.Net中从sqlserver检索(retrieve)图片 | 旧一篇: ASP.NET中树形图的实现

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © nytcjsj