[ADO.NET] 如何 讀取 SQL 資料庫的 二進位圖檔

[ADO.NET] 讀取 SQL 資料庫的 二進位圖檔

除了用繫結(Binding),在上篇,[ADO.NET] 如何使用 ControlBindingsCollection 繫結簡單控制項有簡單的敘述,不然上GOOGLE也是有相當多的資料,今天要使用GetBytes方法加MemoryStream類別來取得二進位的資料

如何讀取二進位圖檔(法一)

1.首先當然先連到一個有圖檔的資料庫

2009-11-1 下午 06-45-55

2.使用ExecuteReader 方法 執行SQL語法,再利用CommandBehavior 值來建置 SqlDataReader

2009-11-1 下午 06-45-55-2

SequentialAccess表示要讀二進位啦~

2009-11-1 下午 07-12-03-3

3.如上圖所述使用 GetByte 方法GetChars 方法來指定要開始讀取作業的位元組位置和所傳回資料的限制緩衝區大小。

2009-11-1 下午 07-19-17-4

2009-11-1 下午 07-28-11-5

若漏了 StartIndex += BufferSize;



2009-11-1 下午 07-30-55-6 

4.最後再把讀到的圖顯示出來,只要點選ListBox項目,圖像就會變化。

ps.上述的方法,不知為什麼在讀取北風資料庫的Employees資料表時,會出現下圖錯誤,相同的Code讀取別的資料表的圖檔卻沒有問題,唯北風資料庫的圖會有問題。是程式邏輯有誤還是資料格式有誤呢?(我嘗試代入姬粑數據但還是失敗了,誰能幫幫我呢)

2009-11-1 下午 08-09-38-11

如何讀取二進位圖檔(法二)

讀取非北風資料庫的圖檔,可以使用前幾篇學到的DataRowCollectionFind 方法詳見 [ADO.NET] 如何使用 DataTable / 搜尋 過濾 資料

MemoryStream mss = new MemoryStream(Bin);






2009-11-1 下午 07-39-51-8

如何讀取二進位圖檔(法三)

跟法二很像的程式碼,用法更為簡單,在寫入MemoryStream時需要偏移78,這是在讀北風資料庫的Employees資料表所用的偏移數據,一般讀檔時都由0開始的,就像法二是由0開始,我也不知道為什麼要偏78,是罵人用的嗎(大誤),如果知道的人就跟我講一下吧(姬粑是google找到的數據)

2009-11-1 下午 07-48-06-10

範例下載

VB_DataReaderBinary.rar

CS_DataReaderBinary.rar

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo