日期:2010-06-12  浏览次数:20420 次

了解构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程

本文涉及的下载

· 示例代码

· Oracle Data Provider for .NET (ODP.NET)

随着 Microsoft 的 .NET 框架的逐渐流行,许多开发人员迫切想了解关于将 .NET 应用程序与 Oracle 集成的最好的方式的信息 — 不仅在基本的连通性方面,还包括与使用 Visual Studio.NET (VS.NET) 进行有效的应用程序开发的关系。

在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程,包括:

如何添加工程引用,以在您的 .NET 工程中支持 Oracle 类

如何创建 Oracle 数据库连接字符串

如何使用 Connection、Command 和 DataReader 对象。

您将有机会应用您在三个上机操作实践中学到的内容,难度范围从比较容易到更复杂。

.NET Data Provider

除了基本的 Oracle 客户端连通性软件,.NET 应用程序还需要使用称为 managed data provider(其中 "managed" 指的是代码由 .NET 框架管理)的工具。 数据供应程序是 .NET 应用程序代码和 Oracle 客户端连通性软件之间的层。 在几乎所有情况下,最优的性能都是通过使用为特定数据库平台优化了的供应程序而不是一般的 .NET OLE DB 数据供应程序实现的。



Oracle、Microsoft 和第三方供应商都提供了针对 Oracle 产品进行了优化的数据供应程序。 Oracle 和 Microsoft 免费提供其 Oracle 数据供应程序。 (Microsoft 为 .NET 框架的 1.1 版提供的供应程序包含在该框架中,不需要单独下载或安装。) 一些第三方数据供应程序支持 Oracle 的较早的版本,或者不需要安装 Oracle 客户端软件。 在本文中,我们假设使用 Oracle Data Provider for .NET (ODP.NET),并单独提供下载。



当安装了 ODP.NET 和所有要求的 Oracle 客户端连通性软件时,就可以开始使用 Visual Studio.NET 进行应用程序开发了。 在开始开发前,请先确认客户端连通性。 如果您在 VS.NET 所在的计算机上使用 SQL*Plus 能够与 Oracle 连接,那么证明您已经正确地安装和配置了 Oracle 客户端软件。



如果您刚接触 Oracle,那么请参阅 Oracle Data Provider for .NET 开发人员指南 10g 版本 1 (10.1) 中的“与 Oracle 数据库连接”部分,以了解 ODP.NET 的背景信息,或参阅 Oracle 数据库管理员指南 10g 版本 1 (10.1),以了解关于管理 Oracle 数据库的通用信息。 您还可以查阅“使用 ODP.NET 与 Oracle 数据库连接”示例代码“方法”文档。



在 Visual Studio.NET 中创建工程



在启动 VS.NET 之后,第一个任务是创建一个工程。 您可以单击 New Project 按钮或选择 File | New | Project...。



出现一个 New Project 对话框。 在对话框左侧的 Project Types 下,选择您的编程语言。 在这个例子中,我们选择 VB.NET。 在右侧的 Templates 下,选择一个工程模板。 为简单起见,这里选择 Windows Application。



您将需要为工程(我们使用 OtnWinApp)和解决方案(我们使用 OtnSamples)指定有意义的名称。 一个解决方案包含一个或多个工程。 当一个解决方案仅包含一个工程时,许多人对二者使用相同的名称。



添加引用



因为我们的工程必须与 Oracle 数据库连接,因此必须添加一个到包含我们选择的数据供应程序的 dll 的引用。 在 Solution Explorer 内,选择 References 节点,右键单击并选择 Add Reference。 或者,您可以转至菜单栏并选择 Project,然后选择 Add Reference。



出现 Add Reference 对话框。



从列表中选择 Oracle.DataAccess.dll,然后单击 Select 按钮,最后单击 OK 按钮,使您的工程能够找到 ODP.NET 数据供应程序。



VB.NET/C# 语句



在添加引用之后,标准的做法是要添加 VB.NET Imports 语句、C# using 语句或 J# import 语句。 从技术上说这些语句不是必要的,但是使用它们可以让您不需用冗长且完整名称来引用数据库对象。



按照惯例,这些语句出现在代码文件的顶部或顶部附近,在命名空间或类声明之前。



Imports System.Data ' VB.NETImports Oracle.DataAccess.Client ' ODP.NET Oracle managed providerusing System.Data; // C#using Oracle.DataAccess.Client; // ODP.NET Oracle managed providerimport System.Data.*; // J#import Oracle.DataAccess.Client; // ODP.NET Oracle managed provider





连接字符串和对象



Oracle 连接字符串和 Oracle 名称解析是不可分的。 假定我们在 tnsnames.ora 文件中定义了一个数据库别名 OraDb,如下:



OraDb= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)) ) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=ORCL) ) )

要使用上面所述的在 tnsnames.ora 文件中定义的 OraDb 别名,您需要使用以下语法:

Dim oradb As String = "Data Source=OraDb;User Id=scott;Password=tiger;" ' VB.NETstring oradb = "Data Source=OraDb;User Id=scott;Password=tiger;"; // C#

不过,您可以修改连接字符串,这样就不需用 tnsnames.ora 文件。 只需用在 tnsnames.ora 文件中定义别名的语句替换别名即可。

' VB.NET Dim oradb As String = "Data Source=(DESCRIPTION=" _ + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)))" _ + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" _ + "User Id=scott;Password=tiger;"string oradb = "Data Source=(DESCRIPTION=" // C# + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)))" + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" + "User Id=scott;Password=tiger;";

正如您在上面看到的那样,用户名和口令是以不加密的文本形式嵌入到连接字符串中的。 这是创建连接字符串的最简单的方法。 然而,从安全的角度而言不加密文本的方法是不可取的。 而且,您需要了解编译的 .NET 应用程序代码仅比不加密文本形式的源代码文件稍微安全一点。 可以非常简便的反编译 .NET dll 和 exe 文件,进而查看