


在SQL Server中保存和輸出圖片的具體方法
介紹
有時(shí)候我們需要保存一些binary data進(jìn)數(shù)據(jù)庫(kù)。SQL Server提供一個(gè)叫做image的特殊數(shù)據(jù)類型供我們保存binary data。Binary data可以是圖片、文檔等。在這篇文章中我們將看到如何在SQL Server中保存和輸出圖片。
建表
為了試驗(yàn)這個(gè)例子你需要一個(gè)含有數(shù)據(jù)的table(你可以在現(xiàn)在的庫(kù)中創(chuàng)建它,也可以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)),下面是它的結(jié)構(gòu):
Column Name
Datatype
Purpose
ID
Integer
identity column Primary key
IMGTITLE
Varchar(50)
Stores some user friendly title to identity the image
IMGTYPE
Varchar(50)
Stores image content type. This will be same as recognized content types of ASP.NET
IMGDATA
Image
Stores actual image or binary data.
保存images進(jìn)SQL Server數(shù)據(jù)庫(kù)
為了保存圖片到table你首先得從客戶端上傳它們到你的web服務(wù)器。你可以創(chuàng)建一個(gè)web form,用TextBox得到圖片的標(biāo)題,用HTML File Server Control得到圖片文件。確信你設(shè)定了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();
從數(shù)據(jù)庫(kù)中輸出圖片
現(xiàn)在讓我們從數(shù)據(jù)庫(kù)中取出我們剛剛保存的圖片,在這兒,我們將直接將圖片輸出至瀏覽器。你也可以將它保存為一個(gè)文件或做任何你想做的。
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();
}
在上面的代碼中我們使用了一個(gè)已經(jīng)打開的數(shù)據(jù)庫(kù),通過datareader選擇images。接著用Response.BinaryWrite代替Response.Write來顯示image文件。
關(guān)鍵字:Server、數(shù)據(jù)庫(kù)、圖片
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解