999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在C#中存取Oracle數據庫表中BLOB數據的方法研究

2009-04-29 00:00:00黃勝忠
電腦知識與技術 2009年32期

摘要:該文在ASP.NET平臺上使用C#編程,通過ADO.NET訪問Oracle后臺數據庫,詳細介紹了存取Oracle數據表中的BLOB數據的方法,并闡述了其工作原理及實現過程。

關鍵詞:.NET平臺;C#;BLOB數據;Oracle數據庫

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)32-8877-02

Methods to Access BLOB Data of Oracle Database in C#

HUANG Sheng-zhong

(Liuzhou Teachers College, Liuzhou 545003, China)

Abstract: This paper programmed with C# on ASP.NET platform and visited the Oracle database through ADO.NET and introduced the method in which users’ access to BLOB data in the Oracle table, and described its working principle and the implementation process.

Key words: .NET platform; C#; BLOB data; oracle database

1 概述

在許多MIS系統中,經常需要存儲圖像、電子文檔、音頻和視頻等多媒體數據,這些數據的數據量很大,具有不規則性,通常被稱作BLOB[1-2]。目前,大多數的DBMS產品都對BLOB數據提供了有力的支持,如Oracle中的Long Binary類型。

BLOB全稱為Binary Large Objects,即大型的、不定的二進制對象,或者字符型數據,通常是文檔(*.txt、*.doc)和圖片(*.jpeg、*.gif、*.bmp)。

設計中常見的問題是將數據存儲在數據庫中還是存儲在文件系統中。存儲在文件系統中的設計比較簡單,只是把文件位置和文件名存放在數據庫中,即在數據庫表中設計一個Text類型的字段來存放這些信息。但缺點是顯而易見的:一方面是在發布應用程序時所有的數據文件都要同時發布出去,并且還要注意路徑的更新;另一方面數據有隨時丟失、被查看、更改的危險[3]。因此在大多數情況下,最好把這些大型二進制數據與其他數據一起存在數據庫中。主要有以下幾個優點:首先,這種存放方式非常便于管理,BLOB數據存放在Oracle數據庫,可以通過Oracle所提供的高效、安全的管理機制對BLOB數據進行存儲和管理,避免了人工管理BLOB數據所帶來的額外開銷,此外,利用oracle數據庫的備份恢復機制,也大大提高了BLOB數據存儲的安全性。同時,BLOB字段可以根據實際內容的長度來占用存儲空間,這一特點大大節省了信息存儲空間的開銷;其次,這種存放形式保證了數據的一致性,BLOB數據和其他數據的插入、更新、刪除都在同一個事務中實現,這樣就保證了文件與數據庫之間的一致性;最后,這種存放形式,還可以實現數據的共享,便于網絡開發。

2 工作原理

在C#中,對數據庫中的BLOB數據進行操作之前,首先對其進行 “初始化”操作,即將其置為空BLOB[4-5]。Oracle提供了EMPTY_BLOB()函數對BLOB字段進行初始化操作。可以通過在INSERT語句中插入EMPTY_BLOB()函數,實現在一張表中插入一條新記錄,并將BLOB字段初始化為空BLOB。初始化操作后,即可利用Oracle提供的DBMS_LOB函數包對BLOB數據進行讀取和寫入。

從數據庫中讀取BLOB數據時,使用 Oracle.DataAccess.Types.OracleBlob類的存儲使用OracleDataReader的GetOracleBlob() 方法讀取的定位器,然后使用Read() 方法訪問 OracleBlob 中的數據[6]。往數據庫中寫BLOB數據時,調用OracleDataReader 的GetOracleBlobForUpdate() 方法,將 FOR UPDATE 子句添加到 SELECT 語句,然后調用GetOracleBlob() 方法取得 BLOB,然后使用OracleBlob對象的 Write() 方法寫入 BLOB中,其工作原理如圖1所示。

3 數據庫的設計與連接配置

3.1 數據庫設計

本文使用Oracle作為后臺數據庫系統。在Image數據庫System方案中的Imgspace表空間建立ImgTable表來存儲BLOB類型數據(圖片、文檔等),其結構如表1所示,其中,Product_id字段是圖片所對應的產品信息表中的產品ID,其值通過相應頁面的文本框productid.Text獲得。

3.2 數據庫連接配置

為了與數據庫相連,需要在Web應用程序的配置文件web.config中配置數據庫連接字符串:

//定義Oracle數據庫連接字符串(數據庫名、用戶名和密碼)

由于Web頁面獲取連接字符串時需要使用的類ConfigurationSettings被包含在System.Configuration命名空間中,因此需要引入該命名空間。頁面獲取連接字符串的程序代碼如下:

Using System.Configuration;//引入命名空間

Private string ORACLECONNSTR=ConfigurationSettings.AppSettings

[“ConnectionString”].ToString();//獲取連接字符串

OracleClient是為Oracle特別定制的數據提供程序,用于訪問Oracle數據源。但默認情況下,VS2005并不加載這個組件資源,因此,需要把System.Data.OracleClient.dll文件拷貝到項目解決方案的\\Bin文件夾下,然后引入此命名空間:Using System.Data.OracleClient。

4 應用程序設計與實現

4.1 寫入BLOB數據的應用設計

寫入BLOB類型的圖片或文檔數據時,可以通過VS2005提供的控件FileUpload的屬性PostedFile.ContentLength獲取上傳文件字節大小,PostedFile.FileName獲取上傳文件文件名,PostedFile.ContentType獲取上傳文件類型[7]。然后使用Stream流對象讀取上傳文件數據到一個字節數組中,再將該字節數組數據存儲到Oracle數據庫中。具體步驟如下:

1) 在ASPX頁面布局:1個FileUpload控件,命名為FileUp;1個button按鈕,命名為BtnSave(保存);1個Label控件,命名為FileLabel,用來顯示上傳文件的類型、大小和提示信息等。

2) 在BtnSave_Click()事件中建立connection和command對象,使用ADO.NET訪問數據庫,用Stream流讀取數據內容到pic數組,保存BLOB數據到Oracle數據庫。

4.2 讀取BLOB數據的應用設計

在數據庫中,圖片的保存方法與文本數據的保存方法不同。文本數據可以直接在數據庫中查看,而圖片數據是以二進制方式保存,查看時必須使用Stream流的Read方法讀出圖片數據,同時需要引入輸入輸出接口命名空間:System.IO[8]。為實現高效地訪問數據,還需要編寫自定義HTTP處理程序創建進程,并返回動態創建的內存流數據[9]。在項目中,使用Datalist控件綁定要即時顯示的圖片。

1) 在需要顯示圖片的ASPX頁面上布局一個Datalist控件,在模板列中添加一個img控件,以通用自定義HTTP請求處理程序Handler.ashx的繼承類Handler封裝HTTP請求信息,然后將圖片ID綁定到img控件:

利用自定義HTTP處理程序類Handler處理HTTP Web請求。

2) 由于內存流MemoryStream可有效降低應用程序對臨時緩沖區和臨時文件的需求,且與其他流相比,執行I/O操作的速度和效率高得多,因此可以利用Handler類的同步處理HTTP Web請求的函數ProcessRequ est,將圖片數據用內存流MemoryStream讀取顯示出來。

5 小結

該文對關系數據庫系統中的BLOB數據的存取策略進行了分析,并在.NET平臺上使用C#編程實現了對Oracle數據庫BLOB數據的存儲和讀取。該方法對聲音、視頻、文檔、動畫等其他BLOB類型數據同樣適用,具有實際的參考價值和意義。

參考文獻:

[1] 蘇貴洋,黃穗.ASP.NET網絡編程從基礎到實踐[M].北京:電子工業出版社,2006.

[2] Watson K,Nagel C.C#入門經典[M].3版.北京:清華大學出版社,2006.

[3] 高曉兵.基于數據倉庫的質量信息系統關鍵技術研究[D].西安:西北工業大學,2005.

[4] 楊勇.數據庫系統中BLOB對象的管理[J].微電子學與計算機,2006,23(7):148-150.

[5] 楊光年,胡昌平,李方泉.Net企業應用架構技術探討[J].淮海工學院學報:自然科學版,2008,17(2):31-34.

[6] 孟現飛,李浩,孫統風.ADO.NET數據訪問模型研究[J].微機發展,2003,13(6):94-98.

[7] 楊勇.數據庫系統中BLOB對象的管理[J].微電子學與計算機,2006,23(7):148-150.

[8] Kauffman J,Matsik B.Beginning ASP.NET Databases Using C#[M].[S.l.]:Wrox Press Ltd.,2002.

[9] 楊光年,胡昌平,李方泉.Net企業應用架構技術探討[J].淮海工學院學報:自然科學版,2008,17(2):31-34.

主站蜘蛛池模板: 欧美日在线观看| 中文字幕资源站| 欧美日本视频在线观看| 熟妇人妻无乱码中文字幕真矢织江 | 国产九九精品视频| 伊人久久久大香线蕉综合直播| 日韩欧美高清视频| 亚洲精品免费网站| 亚洲天堂777| 99精品在线看| 欧美一级夜夜爽| 精品久久人人爽人人玩人人妻| 国产一区成人| 综合成人国产| 一区二区理伦视频| 亚洲男人天堂久久| 久久无码免费束人妻| 亚洲精品日产AⅤ| 国产午夜人做人免费视频| 日韩福利在线视频| 欧美精品v欧洲精品| 亚洲乱码视频| 91久久青青草原精品国产| 久久香蕉国产线看观| 国产精品美女自慰喷水| 欧美中文字幕一区| 亚洲精品手机在线| 国产精品自在在线午夜区app| 久久亚洲国产一区二区| 91美女视频在线| 风韵丰满熟妇啪啪区老熟熟女| 四虎综合网| 一区二区影院| 午夜国产精品视频| 青青青视频蜜桃一区二区| 欧美第九页| 国产日韩精品一区在线不卡| 亚洲欧美日韩综合二区三区| 日韩大片免费观看视频播放| 国产成人亚洲精品无码电影| 国产成人精品一区二区免费看京| 久久亚洲国产最新网站| 久久青草免费91线频观看不卡| 干中文字幕| 免费人成在线观看视频色| 久久精品人人做人人综合试看| 谁有在线观看日韩亚洲最新视频 | 久久9966精品国产免费| 正在播放久久| 国产免费人成视频网| 午夜福利免费视频| 亚洲中文字幕97久久精品少妇| 蜜桃臀无码内射一区二区三区| 91久久精品日日躁夜夜躁欧美| jizz亚洲高清在线观看| 亚洲免费黄色网| 国产麻豆另类AV| 乱系列中文字幕在线视频| 67194在线午夜亚洲| 亚洲AV色香蕉一区二区| 成人国产一区二区三区| 免费激情网址| 久视频免费精品6| 欧美伦理一区| 色AV色 综合网站| 色妞www精品视频一级下载| 99久久这里只精品麻豆| 一级看片免费视频| 宅男噜噜噜66国产在线观看| 亚洲熟女中文字幕男人总站| 五月丁香在线视频| 欧美一区二区福利视频| 国产精品亚洲一区二区三区在线观看| 成人福利一区二区视频在线| 久久成人免费| 国产日韩欧美黄色片免费观看| 亚洲欧美日韩久久精品| 精品福利视频导航| 国产99免费视频| 亚洲va在线观看| 亚洲精品无码抽插日韩| 成人福利在线免费观看|