淺談ADO.NET Entity Framework存取數(shù)據(jù)庫中圖片_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析虛擬主機(jī)上用Asp.net實(shí)現(xiàn)Urlrewrite
      在網(wǎng)上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle Server.Transfer的方法。其實(shí)這種方法是錯誤的。第一,HttpHandle是實(shí)現(xiàn)不了urlrewrite的;第二Server.Transfer是標(biāo)準(zhǔn)的重定向,根本不是urlrewrite。 其實(shí),實(shí)現(xiàn)urlrewrite不用自己HttpHandl

      網(wǎng)站中的圖片可以保存到文件系統(tǒng)中,即專門的目錄用于圖片的存放,這樣的存儲配上數(shù)據(jù)庫中保存的圖片路徑信息,相信很多網(wǎng)站是這么選擇的。這樣的搭配由于存儲和管理信息是分開的,其優(yōu)點(diǎn)就是對數(shù)據(jù)庫的性能不會產(chǎn)生太大影響,但是也正是由于這種分開網(wǎng)站的目錄結(jié)構(gòu)輕易是不可以變的,另外圖片數(shù)據(jù)的備份需要數(shù)據(jù)庫和文件目錄同步進(jìn)行。另外一種存儲和管理圖片的方式是將圖片存到數(shù)據(jù)庫中,如果站點(diǎn)的圖片數(shù)量不是太多,圖片不是太大,這種方式是相當(dāng)適合的。本文我們看一下如何使用ADO.NET Entity Framework構(gòu)建數(shù)據(jù)訪問層,實(shí)現(xiàn)將圖片存到數(shù)據(jù)庫中以及從數(shù)據(jù)庫中獲取圖片。

      前期工作:創(chuàng)建數(shù)據(jù)表 構(gòu)建數(shù)據(jù)訪問層

      第一步,創(chuàng)建數(shù)據(jù)表。

      表中需要一個用于保存圖片的字段,類型設(shè)置為image,代碼如下:

      CREATE TABLE [dbo].[images](

      [id] [int] IDENTITY(1,1) NOT NULL,

      [imagefile] [image] NOT NULL)

      第二步,構(gòu)建數(shù)據(jù)訪問層。該類型的數(shù)據(jù)的插入與一般的基本SQL類型不同,不過在.net 3.5平臺上工作的程序員不需要考慮太多訪問數(shù)據(jù)庫的具體代碼,我們可以選擇ADO.NET Entity Framework和Linq to SQL,這里我們以前者為例。方法簡單介紹如下:

      項目中新建,選擇ADO.NET Entity Data Model,根據(jù)向?qū)Ы⒌綌?shù)據(jù)庫的連接,根據(jù)向?qū)нx擇數(shù)據(jù)庫中的剛才建立的表images,向?qū)ЫY(jié)束之后項目中會添加一個edmx類型的文件,默認(rèn)的界面中會打開自動生成的實(shí)體類圖,我們在向?qū)е羞x擇的所有表格都會對應(yīng)一個實(shí)體類默認(rèn)的名稱是與數(shù)據(jù)表相同,此處的images對應(yīng)的實(shí)體類也是images,但是這樣默認(rèn)使用的話會造成歧義,我們需要手動修改一下,點(diǎn)擊images類在屬性對話框中將Name屬性改為image,Entity Set Name可以改為imageSet或者不改動保持images表示的是image集合,之后實(shí)體類圖中對應(yīng)的類名也變成image了。這里假設(shè)存放圖片的數(shù)據(jù)庫名為XXX,那么生成的管理類也就是我們后面使用最多的類名為XXXEntities。

      將圖片保存到SQL server數(shù)據(jù)庫中

      首先聲明一個image類型的變量不妨稱之為img, image img = new image();,繼而創(chuàng)建一個XXXEntities對象, XXXEntities XXX = new XXXEntities();

      (注意using命名空間和添加對System.Data.Entity的引用)

      asp.net web頁面中添加FileUpload控件,該控件提供一個屬性PostedFile能夠為服務(wù)器提供一個輸入輸出流,剛好可以供我們將選擇的圖片讀到服務(wù)器的內(nèi)存里,代碼如下:

      System.IO.Stream stream = FileUpload1.PostedFile.InputStream;

      byte[] buffer = new byte[stream.Length];

      stream.Read(buffer, 0, (int)stream.Length);

      stream.Close();

      img.imagefile = buffer;

      接下來就是將代表圖片的字節(jié)數(shù)組存到數(shù)據(jù)庫中,代碼如下:

      XXX.AddToimageSet(t);

      XXX.SaveChanges();

      這樣將圖片存入數(shù)據(jù)庫的操作就完成了。

      從數(shù)據(jù)庫中獲取圖片并顯示到asp.net頁面

      asp.net頁面showImage.aspx中放入一個Image控件,命名為Image1,由于圖片是從數(shù)據(jù)庫取來的二進(jìn)制文件,因而不像使用文件系統(tǒng)時圖片都有自己的URL,我們可以直接設(shè)置其URL為圖片在網(wǎng)站中的路徑,解決方法如下:新建另外一個專門用于提供圖片的asp.net頁面getImage.aspx,其功能僅僅是從數(shù)據(jù)庫中讀取圖片,

      使用Response.BinaryWrite()的方式將圖片數(shù)據(jù)流輸出,接下來您可能已經(jīng)想到了,我們將image1的URL設(shè)置為上述getImage.aspx,如果需要根據(jù)圖片的id之類的信息進(jìn)行選擇,我們?yōu)樵揳sp.net頁面提供一個額外的id參數(shù)即可。

      讀取圖片,依然使用上述的XXX實(shí)體管理類,比如獲取id為1的圖片,代碼為:

      int id = int.Parse(Request.QueryString[

      分享:c# 連接字符串?dāng)?shù)據(jù)庫服務(wù)器端口號
      正常的數(shù)據(jù)庫連接字符串配置,這是在MSSQL服務(wù)器端口是1433(默認(rèn))的情況下。

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-08-14
      相關(guān).Net教程