您的位置:首页精文荟萃软件资讯 → 在ASP.NET中把图片保存到SQL SERVER数据库

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

时间:2004/10/7 19:10:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



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

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

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

l???????? 上载图片文件的要求

l???????? 使用Strem对象

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

l???????? 如何使用InputStream方法?

上载图片文件的要求

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

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

enctype="multipart/form-data"

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



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

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

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

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

那么,我们有了一个有Image字段类型的数据表和一个(HTML文件控件)。我们还需要一个提交按钮,当用户选择好图片后可以点击它。在按钮的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属性获得图片类型。最后最重要的是要获得图片文件流,通过如下方法实现:

ImageStream = PersonImage.PostedFile.InputStream

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

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

#读的开始位置

#需要被读的子节数

读声明如下:

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

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

例子的输出样例



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

测试下面的代码

代码下载

点击这里下载ASPX页

点击这里下载存储过程

总结

这样,我们完成了怎样把图片保存到数据库的讨论。我们也准备好了使用上面的下载部分提供的例子和存储过程。如果你想知道怎样从SQL SERVER中读取图片,请参阅我的这篇文章Retrieving Images from SqlServer in ASP .NET

译者注:由于受到HTTP传输协议的限制,在不同的环境下能够上载文件的大小不一。对于要上传大文件的WEB应用程序来说,这并不是一个完美的解决方案,只是为我们提供了一种相对较好的方法。我曾经用这种方法在局域网中成功上载30M的文件,但是在系统性能较低的另外一个本机系统中,最多只能上载5M的数据。另外需要读者注意的是,上载大文件的时候要适当修改machine.config和web.config文件,只要你打开这些文件就可以知道怎样适当的修改。初次翻译,还望大家多多指正。


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本