SQL Server提供了一個特別的資料類型:image,它是一個包含binary資料的類型。下邊這個例子就向你展示了如何將文本或照片放入到資料庫中的辦法。在這篇文章中我們要看到如何在SQL Server中儲存和讀取圖片。
1、建立一個表:
在SQL SERVER中建立這樣結構的一個表:
列名 類型 目的
ID Integer 主鍵ID
IMGTITLE Varchar(50) 圖片的標題
IMGTYPE Varchar(50) 圖片類型. ASP.NET要以辨認的類型
IMGDATA Image 用於儲存位元據
2、儲存圖片到SQL SERVER資料庫中
為了能儲存到表中,你首先要上傳它們到你的WEB 伺服器上,你可以開發一個web form,它用來將用戶端中TextBox web control中的圖片入到你的WEB伺服器上來。將你的 encType 屬性設定為:myltipart/formdata.
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、從資料庫中恢複讀取
現在讓我們來從SQL Server中讀取我們放入的資料吧!我們將要輸出圖片到你的瀏覽器上,你也可以將它存放到你要的位置。
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();
}
要注意的是Response.BinaryWrite 而不是Response.Write.