在SQLServer中保存和输出图片
有时候我们需要保存一些binarydata进数据库。SQLServer提供一个叫做image的特殊数据类型供我们保存binarydata。Binarydata可以是图片、文档等。在这篇文章中我们将看到如何在SQLServer中保存和输出图片。
建表
为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构:
ColumnName
Datatype
Purpose
ID
Integer
identitycolumnPrimarykey
IMGTITLE
Varchar(50)
Storessomeuserfriendlytitletoidentitytheimage
IMGTYPE
Varchar(50)
Storesimagecontenttype.ThiswillbesameasrecognizedcontenttypesofASP.NET
IMGDATA
Image
Storesactualimageorbinarydata.
保存images进SQLServer数据库
为了保存图片到table你首先得从客户端上传它们到你的web服务器。你可以创建一个webform,用TextBox得到图片的标题,用HTMLFileServerControl得到图片文件。确信你设定了Form的encType属性为multipart/form-data。
Streamimgdatastream=File1.PostedFile.InputStream;
intimgdatalen=File1.PostedFile.ContentLength;
stringimgtype=File1.PostedFile.ContentType;
stringimgtitle=TextBox1.Text;
byte[]imgdata=newbyte[imgdatalen];
intn=imgdatastream.Read(imgdata,0,imgdatalen);
stringconnstr=
((NameValueCollection)Context.GetConfig
("appSettings"))["connstr"];
SqlConnectionconnection=newSqlConnection(connstr);
SqlCommandcommand=newSqlCommand
("INSERTINTOImageStore(imgtitle,imgtype,imgdata)
VALUES(@imgtitle,@imgtype,@imgdata)",connection);
SqlParameterparamTitle=newSqlParameter
("@imgtitle",SqlDbType.VarChar,50);
paramTitle.Value=imgtitle;
command.Parameters.Add(paramTitle);
SqlParameterparamData=newSqlParameter
("@imgdata",SqlDbType.Image);
paramData.Value=imgdata;
command.Parameters.Add(paramData);
SqlParameterparamType=newSqlParameter
("@imgtype",SqlDbType.VarChar,50);
paramType.Value=imgtype;
command.Parameters.Add(paramType);
connection.Open();
intnumRowsAffected=command.ExecuteNonQuery();
connection.Close();
从数据库中输出图片
现在让我们从数据库中取出我们刚刚保存的图片,在这儿,我们将直接将图片输出至浏览器。你也可以将它保存为一个文件或做任何你想做的。
privatevoidPage_Load(objectsender,System.EventArgse)
{
stringimgid=Request.QueryString["imgid"];
stringconnstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
stringsql="SELECTimgdata,imgtypeFROMImageStoreWHEREid="
+imgid;
SqlConnectionconnection=newSqlConnection(connstr);
SqlCommandcommand=newSqlCommand(sql,connection);
connection.Open();
SqlDataReaderdr=command.ExecuteReader();
if(dr.Read())
{
Response.ContentType=dr["imgtype"].ToString();
Response.BinaryWrite((byte[])dr["imgdata"]);
}
connection.Close();
}
在上面的代码中我们使用了一个已经打开的数据库,通过datareader选择images。接着用Response.BinaryWrite代替Response.Write来显示image文件。