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

asp.net|server|数据|数据库

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

本文将讨论在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文件,只要你打开这些文件就可以知道怎样适当的修改。初次翻译,还望大家多多指正。

时间: 2024-10-02 09:26:27

在ASP.NET中把图片保存到SQL SERVER数据库的相关文章

把RichTextBox中的文本保存到Sql Server中(C#)

server 保存: private void btnSave_Click(object sender, System.EventArgs e) { FileStream stream = null; SqlConnection conn = null; SqlCommand cmd = null; try { richTextBox1.SaveFile( "temp.rtf" ); stream = new FileStream("temp.rtf", FileM

c#-如何把datagridview中的数据保存到SQL数据库中?VB.NET或C#

问题描述 如何把datagridview中的数据保存到SQL数据库中?VB.NET或C# 如下图:已经实现从EXCEL导入数据到Datagridview中,现在要把其中的数据保存到数据库的AAAie表里面.请用代码说明,谢谢. 解决方案 取数据用ado.net保存到SQL Server数据库.http://blog.csdn.net/lysc_forever/article/details/7697536 解决方案二: 方法1.创建一个数据库,表,表名自取,表的字段和Excel相同,取Excel

kindeditor sql-如何将kindeditor中的数据保存到SQL数据库中

问题描述 如何将kindeditor中的数据保存到SQL数据库中 主要就是我从数据库中读取了数据,然后显示在页面上.然后我在页面上通过kindeditor修改了那些数据.要怎么再保存进SQL数据库 解决方案 直接关闭即可以保存内容

asp.net下将图片保存到XML文件的方法_实用技巧

一.保存图片到XML文件 复制代码 代码如下: /// <summary> /// 保存图片到XML文件 /// </summary> private void UploadImageToXml() { ///得到用户要上传的文件名 string strFilePathName = loFile.PostedFile.FileName; string strFileName = Path.GetFileName(strFilePathName); int FileLength =

C#读取excel显示到dataGridView中,不允许修改,然后保存到SQL SERVER中,如何实现?

问题描述 C#读取excel显示到dataGridView中,不允许修改,然后保存到SQLSERVER中,如何实现?谢谢,QQ:270996889msn:zz123439@sohu.com 解决方案 解决方案二:既然要显示到DGV1.那么用ADO.NET读取到DataTable,见ADO.NET如何读取Excel(下)http://www.cnblogs.com/Jinglecat/archive/2006/08/26/487167.html(这是asp.net的,稍微修改即可,如Excel路径

C# WPF怎么把数据存到sql server数据库里

问题描述 想要把得到的fx值(此值已正确得到)存到数据库中T_Result表的原材料列中,编译没有错误,但数据库里总是空的,fx值总存不进去是怎么回事呢?代码如下:stringconnstr="DataSource=.;InitialCatalog=计算用原料数据表;IntegratedSecurity=SSPI";SqlConnectionsqlcnn=newSqlConnection(connstr);sqlcnn.Open();SqlCommandcommand=newSqlCo

Excel表数据导入Sql Server数据库中两种办法

方法一,程序导入 C#.ASP.NET中将Excel表中的数据导入到Sql Server数据库中对应的表中. 这里我们将E:\test.xls中Sheet1表中的数据导入到test数据库中的my_test表中. 软件:VS2005,SQL Server2000, test.xls中Sheet1表中有三个字段,编号.名称.备注.具体内容如下图. 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段 tid int类型, tname nvarchar类型, tt nvarc

在SQL Server数据库中批量导入数据

第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中. 在使用这条语句的时候,需要注意几个方面的内容. 假设有一个表table1,字段为f1(int).f2(varchar(50)).  代码如下 复制代码 SELECT*INTO table2 FROM table1 这条SQL语的在建立table2表

SQL Server数据库中批量导入数据的四种方法总结_MsSql

在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些. 第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中.