用.NET新提供的managed provider來訪問Oracle數(shù)據(jù)
2024-08-29 13:38:59
供稿:網友
微軟公司把SQL Server提升為.NET應用程序的數(shù)據(jù)庫,但是,由于Oracle很高的市場占有率,你無疑需要在.NET應用程序中使用Oracle數(shù)據(jù)。在ADO.NET中,Oracle數(shù)據(jù)是利用通用的OLE-DB PRovider來訪問的,但是這在性能上落后于SQL Server的治理提供者(managed provider)。 微軟公司熟悉到了有必要專門為Oracle提供治理者(provider),因此它發(fā)布了 .NET Managed Provider For Oracle。 讓我們看看如何利用它來訪問數(shù)據(jù)的。
得到你所需要的
在以前,人們經常用“驅動(driver)”這一詞來表示讓應用程序訪問數(shù)據(jù)庫的工具。現(xiàn)在,在.NET下,人們用“治理提供者(managed provider)”來取代“驅動”一詞。.NET Managed Provider For Oracle是對.NET的一個附加,它依靠于Oracle客戶軟件來與Oracle數(shù)據(jù)庫接口。所以,除了擁有.NET提供者之外,你還需要安裝Oracle客戶軟件。
你還需要在Visual Studio .NET中添加對System.Data.OracleClient.dll的引用,為此,你可以在Visual Studio .NET中鼠標右擊References列表或者從菜單欄中選擇Project Add Reference。你也許還需要在你的應用程序中正確導入System.Data.OracleClient名字空間。
訪問數(shù)據(jù)
.NET環(huán)境的一大優(yōu)點就是數(shù)據(jù)庫訪問代碼通常遵循相同的模式而與后端數(shù)據(jù)庫無關。首先,你建立一個連接,然后配置SQL語句或者指令。最后,執(zhí)行SQL(語句或者命令)并處理結果。
顯而易見,用來訪問Oracle數(shù)據(jù)庫的代碼與用來訪問SQL Server的代碼不會有很大的區(qū)別。這兩者的對象名字不同,但是過程是相似的,你可以在清單A中的VB.NET代碼中很清楚的看出這一點。
清單A如下:
Listing A: accessing Oracle data
Dim oracleConnection As New OracleConnection() Dim oracleCommand As New OracleCommand() Dim oracleReader As OracleDataReader Dim sqlString As String
sqlString = "data source=oracle.server;user id=test;passWord=test" oracleConnection.ConnectionString = oracleConnection.Open() oracleCommand.CommandText = "SELECT * FROM DBTEST.PEOPLE" oracleCommand.Connection = oracleConnection oracleReader = oracleCommand.ExecuteReader
清單A中的代碼建立一個連接、創(chuàng)建一個命令對象(該對象用來返回PEOPLE表中所有的行),并用OracleDataReader(它與SqlDataReader和OleDbDataReader對象相似)來讀取數(shù)據(jù)。
假如你用其它.NET環(huán)境來處理SQL Server,你會立即注重到你所用到的類的名字與Oracle對應類的名字是相似的。例如,SQL Server連接類命名為SqlConnection,而Oracle連接類命名為OracleConnection。
提防錯誤
在所有的.NET開發(fā)中,你都應該密切監(jiān)視例外的產生以確保在訪問數(shù)據(jù)時代碼執(zhí)行無誤。OracleClient名字空間包括了一個特定于Oracle的例外類,即OracleException,它可以用在標準的try…catch代碼塊中。清單B給出的代碼就利用上述方法來捕捉任何例外。清單B給出了一個如何在運行時處理例外的例子。
清單B如下:
Listing B: Exception handling
Dim oracleConnection As New OracleConnection() Dim oracleCommand As New OracleCommand() Dim oracleReader As OracleDataReader Dim sqlString As String sqlString = "data source=oracle.server;user id=test;password=test" Try oracleConnection.ConnectionString = sqlString oracleConnection.Open() oracleCommand.CommandText = "SELECT * FROM DBTEST.PEOPLE" oracleCommand.Connection = oracleConnection oracleReader = oracleCommand.ExecuteReader ' Work with oracle data oracleReader.Close() oracleCommand.Dispose() Catch ex As OracleException 'handle the exception Catch ex As Exception 'handle the exception Finally If Not (oracleConnection Is Nothing) Then oracleConnection.Close() End If End Try
盡管在本文中我用到了OracleDataReader類,但實際上Oracle數(shù)據(jù)提供者包括了所有標準ADO.NET類(如OracleDataSet和OracleDataAdapter)的各種版本。
微軟公司推出的.NET Managed Provider For Oracle提供了自由訪問Oracle數(shù)據(jù)的必備工具,其性能遠優(yōu)于對OLE-DB的訪問。ADO.NET類的設計對數(shù)據(jù)庫的訪問所用的方法相同、對象相似,與數(shù)據(jù)庫類型無關。因此,OLE-DB項目可以很輕易轉換到Oracle下。