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

上篇:图片存入到Sql Serversql

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

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

在这篇文章中咱们能够学到如下几个方面的知识:浏览器

1. 插入图片的必要条件ide

2. 使用流对象oop

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

4.怎么使用InputStream方法?学习

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

在咱们开始上传以前,有两件重要的事咱们须要作:orm

#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中读取图片呢?

 

下篇:从SqlServer中读取图片

 

 

这篇文章是我写的"如何把图片存入 sqlServer中"的后续。 和存储图片相比,读取图片就要简单多了。输出一副图片咱们要作的就是使用 Response对象的BinaryWrite方法。 同时设置图片的格式。在这篇文章中,咱们将讨论如何从SqlServer中检索图片。 并将学习如下几个方面的知识. ·如何设置图片的格式? ·如何使用BinaryWrite方法。 咱们已经在Person表中存储了数据,那么咱们就写些代码来从表中读取数据。 下面的代码检索了全部的值从Person表中。 从sqlserver中读取图片的代码. Public Sub Page_Load(sender As Object, e As EventArgs)         Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))         Dim myCommand As New SqlCommand("Select * from Person", myConnection)         Try             myConnection.Open()             Dim myDataReader as SqlDataReader             myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)             Do While (myDataReader.Read())                 Response.ContentType = myDataReader.Item("PersonImageType")                 Response.BinaryWrite(myDataReader.Item("PersonImage"))             Loop             myConnection.Close()             Response.Write("Person info successfully retrieved!")         Catch SQLexc As SqlException             Response.Write("Read Failed : " & SQLexc.ToString())         End Try     End Sub 看看他是怎么工做的? 上面的例子很简单。咱们所做的就是执行一个sql语句,再循环读取全部的记录(looping through all the records). 在显示图片以前,咱们先设置了图片的contentType,而后咱们使用BinaryWrite方法把图片输出到浏览器。 源代码: /// retriving.aspx <%@ Page Language="vb" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <HTML>   <HEAD>     <title>Retrieving Image from the Sql Server</title>         <script runat=server>                         Public Sub Page_Load(sender As Object, e As EventArgs)                                     ' Create Instance of Connection and Command Object                                     Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))                                     Dim myCommand As New SqlCommand("Select * from Person", myConnection)                                      Try                                                myConnection.Open()                                                 Dim myDataReader as SqlDataReader                                                 myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)                                                Do While (myDataReader.Read())                                                             Response.ContentType = myDataReader.Item("PersonImageType")                                                             Response.BinaryWrite(myDataReader.Item("PersonImage"))                                                Loop                                                                                             myConnection.Close()                                                 Response.Write("Person info successfully retrieved!")                                     Catch SQLexc As SqlException                                                 Response.Write("Read Failed : " & SQLexc.ToString())                                     End Try                         End Sub         </script>   </HEAD>   <body style="font: 10pt verdana">   </body> </HTML>

相关文章
相关标签/搜索