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

时间:2021-05-02

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

有时候我们需要保存一些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文件。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章