ASP.NET数据库图片存储到Sql2000中

开发 后端
本文介绍如何把ASP.NET数据库图片存储到Sql2000中,从而防止数据被用户盗取。

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

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

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

    1. 插入图片的必要条件

    2. 使用流对象

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

    4.怎么使用InputStream方法?

ASP.NET数据库图片存储:插入图片的必要条件

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

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

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

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

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

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

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

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

  1. Dim intImageSize As Int64   
  2.      Dim strImageType As String   
  3.      Dim ImageStream As Stream  
  4.  
  5.     ’ Gets the Size of the Image   
  6.     intImageSize = PersonImage.PostedFile.ContentLength  
  7.  
  8.     ’ Gets the Image Type   
  9.     strImageType = PersonImage.PostedFile.ContentType  
  10.  
  11.     ’ Reads the Image   
  12.     ImageStream = PersonImage.PostedFile.InputStream  
  13.  
  14.     Dim ImageContent(intImageSize) As Byte   
  15.     Dim intStatus As Integer   
  16.     intStatus = ImageStream.Read(ImageContent, 0, intImageSize)  
  17.  
  18.     ’ Create Instance of Connection and Command Object   
  19.     Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))   
  20.     Dim myCommand As New SqlCommand("sp_person_isp", myConnection)  
  21.  
  22.     ’ Mark the Command as a SPROC   
  23.     myCommand.CommandType = CommandType.StoredProcedure  
  24.  
  25.     ’ Add Parameters to SPROC   
  26.     Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)   
  27.     prmPersonImage.Value = ImageContent   
  28.     myCommand.Parameters.Add(prmPersonImage)  
  29.  
  30.     Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)   
  31.     prmPersonImageType.Value = strImageType   
  32.     myCommand.Parameters.Add(prmPersonImageType)  
  33.  
  34.     Try   
  35.         myConnection.Open()   
  36.         myCommand.ExecuteNonQuery()   
  37.         myConnection.Close()  
  38.        Response.Write("New person successfully added!")   
  39.     Catch SQLexc As SqlException   
  40.         Response.Write("Insert Failed. Error Details are: " & SQLexc.ToString())   
  41.     End Try 

这是怎么实现ASP.NET数据库图片存储的呢?

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

intImageSize = PersonImage.PostedFile.ContentLength

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

ImageStream = PersonImage.PostedFile.InputStream

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

buffer

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

offset

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

count

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

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

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

ASP.NET数据库图片存储:图片存入数据库结论

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

【编辑推荐】

  1. ASP.NET自定义错误处理页面的添加
  2. ASP.NET中的session存储模式运用
  3. ASP.NET中的文件上传下载方法集合
  4. ASP.NET中的cookie读写方法介绍
  5. ASP.NET中的javascript操作
责任编辑:yangsai 来源: 百度空间
相关推荐

2009-08-12 11:04:38

ASP.NET和SQL

2011-04-07 09:44:23

SQL2000数据库SQL2005

2009-08-05 09:38:28

SQL Server数

2009-07-21 13:40:24

ASP.NET上传图片显示图片

2010-05-25 08:49:33

连接MySQL

2009-07-28 17:36:21

ASP.NET数据库连

2009-02-23 15:20:03

SQL Server数据库ASP.NET

2009-07-31 09:57:47

ASP.NET数据库缓

2009-07-31 13:52:26

ASP.NET数据库图

2009-03-09 17:46:16

ASP.NETSQLOracle

2009-07-20 17:03:55

批量插入数据ASP.NET

2009-07-28 11:00:24

Excel导入SQL

2009-07-31 10:29:57

ASP.NET数据库操

2009-08-05 15:40:49

ASP.NET连接数据

2009-08-11 12:52:05

ASP.NET数据库程

2009-07-29 09:12:31

ASP.NET数据库连

2009-09-03 19:30:02

ASP.NET数据库SQL Server

2010-06-02 12:32:29

MySQL数据库

2009-07-20 16:56:16

SQL语句ASP.NET

2009-07-28 14:16:31

ASP.NET与MyS
点赞
收藏

51CTO技术栈公众号