在SQL Server中儲存和輸出圖片 (轉)

worldblog發表於2008-01-05
在SQL Server中儲存和輸出圖片 (轉)[@more@]

介紹

:namespace prefix = o ns = "urn:schemas--com::office" /> 

  有時候我們需要儲存一些binary data進。 SERVER提供一個叫做image的特殊資料型別供我們儲存binary data。Binary data可以是圖片、文件等。在這篇文章中我們將看到如何在中儲存和輸出圖片。

 

建表

 

  為了試驗這個例子你需要一個含有資料的table(你可以在現在的庫中建立它,也可以建立一個新的資料庫),下面是它的結構:

Column Name

Datatype

Purpose

ID

Integer

ntity 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

IMGDATA

Image

Stores actual image or binary data.

 

儲存imagesSQL Server資料庫

 

  為了儲存圖片到table你首先得從客戶端它們到你的。你可以建立一個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", SqlType.VarChar,50 );

paramTitle.Value = imgtitle;

command.Parameters.Add( paramTitle);

SqlParameter parata = 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();

 

從資料庫中輸出圖片

 

  現在讓我們從資料庫中取出我們剛剛儲存的圖片,在這兒,我們將直接將圖片輸出至。你也可以將它儲存為一個檔案或做任何你想做的。

 

private void Page_Load( sender, System.EventArgs e)

{

string imgid =Request.QueryString["imgid"];

string connstr=((NameValueCollection)

Context.GetConfig("appSettings"))["connstr"];

string sql=" 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檔案。

 

  希望您喜歡這些文章,如有任何意見和建議請致信to:webmaster@bipinjoshi.com">webmaster@bipinjoshi.com

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章