首 页IT知识库翔宇问吧收藏本站
当前位置:翔宇亭IT乐园IT知识库WEBASP.NET

如何在SQL Server中保存和输出图片

减小字体 增大字体 作者:不详  来源:转载  发布时间:2010-03-28 07:39:00

有很多网友想在数据库中保存图片,虽然这不是什么最好的选择,但有时的确很有用。

有时候我们需要保存一些binary data进数据库。SQL Server提供一个叫做image的特殊数据类型供我们保存binary data。Binary data可以是图片、文档等。在这篇文章中我们将看到如何在SQL Server中保存和输出图片。

1、建表

为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构:  

列名 数据类型 目的
ID integer 主键
IMGTITLE varchar(50) 存储图片名字
IMGTYPE varchar(50) 存储图片类型
IMGDATA image 存储图片本身数据

2、保存images进SQL Server数据库  

为了保存图片到table你首先得从客户端上传它们到你的web服务器。你可以创建一个web form,用TextBox得到图片的标题,用HTML File Server Control得到图片文件。确信你设定了Form的encType属性为multipart/form-data。  

   Stream imgdatastream = File1.PostedFile.InputStream;
   int imgdatalen = File1.PostedFile.ContentLength;
   string imgtype = File1.PostedFile.ContentType;
   string imgtitle = TextBox1.Text;
   byte[] imgdata = new byte[imgdatalen];
   int n = imgdatastream.Read(imgdata,0,imgdatalen);
   string connstr=
   ((NameValueCollection)Context.GetConfig
   ("appSettings"))["connstr"];
   SqlConnection connection = new SqlConnection(connstr);
   SqlCommand command = new SqlCommand
   ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)
   VALUES ( @imgtitle, @imgtype,@imgdata )", connection );
   SqlParameter paramTitle = new SqlParameter
   ("@imgtitle", SqlDbType.VarChar,50 );
   paramTitle.Value = imgtitle;
   command.Parameters.Add( paramTitle);
   SqlParameter paramData = new SqlParameter
   ( "@imgdata", SqlDbType.Image );
   paramData.Value = imgdata;
   command.Parameters.Add( paramData );
   SqlParameter paramType = new SqlParameter
   ( "@imgtype", SqlDbType.VarChar,50 );
   paramType.Value = imgtype;
   command.Parameters.Add( paramType );
   connection.Open();
   int numRowsAffected = command.ExecuteNonQuery();
   connection.Close();

3、从数据库中输出图片

现在让我们从数据库中取出我们刚刚保存的图片,在这儿,我们将直接将图片输出至浏览器。你也可以将它保存为一个文件或做任何你想做的。

   private void Page_Load(object sender, System.EventArgs e)
   {
   string imgid =Request.QueryString["imgid"];
   string connstr=((NameValueCollection)
   Context.GetConfig("appSettings"))["connstr"];
   string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = "
   + imgid;
   SqlConnection connection = new SqlConnection(connstr);
   SqlCommand command = new SqlCommand(sql, connection);
   connection.Open();
   SqlDataReader dr = command.ExecuteReader();
   if(dr.Read())
   {
   Response.ContentType = dr["imgtype"].ToString();
   Response.BinaryWrite( (byte[]) dr["imgdata"] );
   }
   connection.Close();
   }

 在上面的代码中我们使用了一个已经打开的数据库,通过datareader选择images。接着用Response.BinaryWrite代替Response.Write来显示image文件。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

用户名: 查看更多评论

分 值:100分 90分 80分 70分 60分 40分 20分

内 容:

请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!

验证码:

关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图 | 用户守则 | 联系我们
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2019 biye5u.com. All Rights Reserved.
网站备案号:黑ICP备13005378号-3