在ASP.NET中把图片保存到SQL SERVER数据库

 
介绍

在很多情况下,我们需要把图片保存到数据库中。在某些应用程序中,存在一些敏感信息不能被存储到文件系统中,因为存储在文件系统上的任何图片都很容易被用户非法获得。

本文将讨论在ASP.NET中怎样把图片保存到SQL SERVER数据库中。

在本文中我们将了解到以下几方面的内容:

l         上载图片文件的要求

l         使用Strem对象

l         获得上载图片大小和类型

l         如何使用InputStream方法?

上载图片文件的要求

在开始上载前我们需要作两件重要的事情

#Form标记的enctype属性需要被设置为如下形式:

enctype="multipart/form-data" <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#提供一个让用户选择图片文件的Html控件:

<input type=file>

#还要引用System.IO命名空间来处理Strem对象

上述的三项都要应用到aspx页中。在SQL SERVER中还有以下的一些要求:

#一个至少有一个字段类型为Image的表

#另外有一个用来存储图片类型的Varchar类型的字段就更好了

那么,我们有了一个有Image字段类型的数据表和一个<input type=file>(HTML文件控件)。我们还需要一个提交按钮,当用户选择好图片后可以点击它。在按钮的OnClick事件中我们要获得图片文件的内容并最终把它插入到数据表中。让我们来看看按钮的OnClick事件,它读取图片并把图片插入到数据表中。

提交按钮的OnClick事件代码

 
None.gif    Dim  intImageSize  As  Int64
None.gif    
Dim  strImageType  As   String
None.gif    
Dim  ImageStream  As  Stream
None.gif
None.gif    
'  Gets the Size of the Image
None.gif
    intImageSize  =  PersonImage.PostedFile.ContentLength
None.gif
None.gif    
'  Gets the Image Type
None.gif
    strImageType  =  PersonImage.PostedFile.ContentType
None.gif
None.gif    
'  Reads the Image
None.gif
    ImageStream  =  PersonImage.PostedFile.InputStream
None.gif
None.gif    
Dim  ImageContent(intImageSize)  As   Byte
None.gif    
Dim  intStatus  As   Integer
None.gif    intStatus 
=  ImageStream.Read(ImageContent,  0 , intImageSize)
None.gif
None.gif    
'  Create Instance of Connection and Command Object
None.gif
     Dim  myConnection  As   New  SqlConnection(ConfigurationSettings.AppSettings( " ConnectionString " ))
None.gif    
Dim  myCommand  As   New  SqlCommand( " sp_person_isp " , myConnection)
None.gif
None.gif    
'  Mark the Command as a SPROC
None.gif
    myCommand.CommandType  =  CommandType.StoredProcedure
None.gif
None.gif    
'  Add Parameters to SPROC
None.gif
     Dim  prmPersonImage  As   New  SqlParameter( " @PersonImage " , SqlDbType.Image)
None.gif    prmPersonImage.Value 
=  ImageContent
None.gif    myCommand.Parameters.Add(prmPersonImage)
None.gif
None.gif    
Dim  prmPersonImageType  As   New  SqlParameter( " @PersonImageType " , SqlDbType.VarChar,  255 )
None.gif    prmPersonImageType.Value 
=  strImageType
None.gif    myCommand.Parameters.Add(prmPersonImageType)
None.gif
None.gif    
Try
None.gif        myConnection.Open()
None.gif        myCommand.ExecuteNonQuery()
None.gif        myConnection.Close()
None.gif        Response.Write(
" New person successfully added! " )
None.gif    
Catch  SQLexc  As  SqlException
None.gif        Response.Write(
" Insert Failed. Error Details are:  "   &  SQLexc.ToString())
None.gif    
End   Try


它是如何工作的?

对象PersonImage HTMLInputFile 控件。首先我们要获得被插入图片的大小,通过如下方法实现:

intImageSize = PersonImage.PostedFile.ContentLength

接着要通过ContenType属性获得图片类型。最后最重要的是要获得图片文件流,通过如下方法实现:

ImageStream = PersonImage.PostedFile.InputStream

我们有一个byte数组ImageContent,准备用来保存图片内容。整个图片通过Stream对象的Read方法读取,这个方法有三个参数,即:

#被复制的图片内容的目标位置

#读的开始位置

#需要被读的子节数

读声明如下:

intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

现在,我们读取了整个图片内容。接着我们需要把图片内容插入SQL数据表中,我们将用用一个存储过程把图片类型和图片插入SQL数据表。如果你看过上面的代码清单,你就知道我们把数据类型设置为SqlDbType.Image.就这样,我们成功地把图片保存到了SQL SERVER数据库。

例子的输出样例

图:将图片保存到sql server 数据库

测试下面的代码

代码下载

点击这里下载ASPX页

点击这里下载存储过程

总结

转载于:https://www.cnblogs.com/conjee/archive/2006/05/19/404494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值