在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。
在这篇文章中我们可以学到以下几个方面的知识:
1.;插入图片的必要条件
2.;使用流对象
3.;查找准备上传的图片的大小和类型
4.怎么使用InputStream方法?
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#Form;标记的;enctype;属性应该设置成;enctype="multipart/form-data"
#;需要一个<input;type=file>表单来使用户选择他们要上传的文件,同时我们需要导入;System.IO名称空间来处理流对象
把以上三点应用到ASPx页面。同时我们需要对SqlServer做以下的准备。
#;需要至少含有一个图片类型的字段的表
#;如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。
现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有<input;type=file>标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的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属性。最后,也是最重要的事就是取得Image;Stream,这可以用以下代码实现:
ImageStream;=;PersonImage.PostedFile.InputStream
我们需要一个字节型数组来存储image;内容。读取整个图片可以使用Stream对象的Read方法来实现。Read(in;byte[];buffer,int;offset,int;count)方法有三个参数。【关于Read方法的详细可以参看.Net;FrameWorkSDK】他们是:
buffer
字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的;offset;和;(offset;+;count);之间的值由从当前源中读取的字节替换。
offset
buffer;中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。
count
要从当前流中最多读取的字节数。
这个Read方法用以下代码实现:
intStatus;=;ImageStream.Read(ImageContent,;0,;intImageSize)
.
现在,我们已经读取了整个图片的内容,下一步,我们要把这些内容存入到sql;表。我们将使用存储过程来完成插入图片类型和图片内容到sql;表。如果你浏览了上面的代码,你将会发现我们使用了sqldbtype.image的数据类型(datatype)。Ok了,完成了这些,我们也就成功的把图片存入到SqlServer中了。下面是我们编写的ASPx页面。
结论
我们已经讨论了如何把图片存入到Sql;Server,那么我们如何从SqlServer中读取图片呢?可以参看我的另一篇文章:在ASP.Net中从SqlServer中检索图片。
标签: