微软公司把SQL Server提升为NET应用程序的数据库但是由于Oracle很高的市场占有率你无疑需要在NET应用程序中使用Oracle数据在ADONET中Oracle数据是利用通用的OLEDB provider来访问的但是这在性能上落后于SQL Server的管理提供者(managed provider)微软公司认识到了有必要专门为Oracle提供管理者(provider)因此它发布了 NET Managed Provider For Oracle 让我们看看如何利用它来访问数据的
得到你所需要的
在以前人们常常用驱动(driver)这一词来表示让应用程序访问数据库的工具现在在NET下人们用管理提供者(managed provider)来取代驱动一词NET Managed Provider For Oracle是对NET的一个附加它依赖于Oracle客户软件来与Oracle数据库接口所以除了拥有NET提供者之外你还需要安装Oracle客户软件
你还需要在Visual Studio NET中添加对SystemDataOracleClientdll的引用为此你可以在Visual Studio NET中鼠标右击References列表或者从菜单栏中选择Project | Add Reference你也许还需要在你的应用程序中正确导入SystemDataOracleClient名字空间
访问数据
NET环境的一大优点就是数据库访问代码通常遵循相同的模式而与后端数据库无关首先你建立一个连接然后配置SQL语句或者指令最后执行SQL(语句或者命令)并处理结果
显而易见用来访问Oracle数据库的代码与用来访问SQL Server的代码不会有很大的区别这两者的对象名字不同但是过程是相似的你可以在清单A中的VBNET代码中很清楚的看出这一点
清单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=oracleserver;user id=test;password=test oracleConnectionConnectionString = oracleConnectionOpen() oracleCommandCommandText = SELECT * FROM DBTESTPEOPLE oracleCommandConnection = oracleConnection oracleReader = oracleCommandExecuteReader
清单A中的代码建立一个连接创建一个命令对象(该对象用来返回PEOPLE表中所有的行)并用OracleDataReader(它与SqlDataReader和OleDbDataReader对象相似)来读取数据
如果你用其它NET环境来处理SQL Server你会立即注意到你所用到的类的名字与Oracle对应类的名字是相似的例如SQL Server连接类命名为SqlConnection而Oracle连接类命名为OracleConnection
提防错误
在所有的NET开发中你都应该密切监视例外的产生以确保在访问数据时代码执行无误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=oracleserver;user id=test;password=test Try oracleConnectionConnectionString = sqlString oracleConnectionOpen() oracleCommandCommandText = SELECT * FROM DBTESTPEOPLE oracleCommandConnection = oracleConnection oracleReader = oracleCommandExecuteReader Work with oracle data oracleReaderClose() oracleCommandDispose() Catch ex As OracleException handle the exception Catch ex As Exception handle the exception Finally If Not (oracleConnection Is Nothing) Then oracleConnectionClose() End If End Try
尽管在本文中我用到了OracleDataReader类但实际上Oracle数据提供者包括了所有标准ADONET类(如OracleDataSet和OracleDataAdapter)的各种版本微软公司推出的NET Managed Provider For Oracle提供了自由访问Oracle数据的必备工具其性能远优于对OLEDB的访问ADONET类的设计对数据库的访问所用的方法相同对象相似与数据库类型无关因此OLEDB项目可以很容易转换到Oracle下