在Oracle数据库上构建.NET应用程序

2016-02-19 16:48 8 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐在Oracle数据库上构建.NET应用程序,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

  随着 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...(如下所示)。

  

  图 1: 在 Visual Studio.NET 中创建一个新工程

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

  

  图 2: 使用 New Project 对话框

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

  添加引用

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

  

  图 3: 添加引用

  出现 Add Reference 对话框。

  

  图 4: 选择 ODP.NET 管理的数据供应程序

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

  

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  图 5: 选择 Oracle Managed Provider 之后的解决方案浏览器

  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 文件,进而查看原始的不加密文本形式的内容。 (加密实际上是正确的解决方案,但这个主题与我们这里的讨论相差太远。)

  接下来,您必须从连接类中完成一个连接对象的实例化。 连接字符串必须与连接对象关联。

Dim conn As New OracleConnection(oradb) ' VB.NETOracleConnection conn = new OracleConnection(oradb); // C#
  注意,通过将连接字符串传递给连接对象的构造器(该构造器进行了重载),连接字符串与连接对象建立关联。 构造函数的其他重载允许以下这些替代的语法:
Dim conn As New OracleConnection() ' VB.NETconn.ConnectionString = oradbOracleConnection conn = new OracleConnection(); // C#conn.ConnectionString = oradb;
  在连接字符串与连接对象建立关联之后,使用 Open 方法来创建实际的连接。
conn.Open() ' VB.NETconn.Open(); // C#

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  我们将在稍后介绍错误处理。

  Command 对象

  Command 对象用于指定执行的 SQL 命令文本 SQL 字符串或存储过程。 类似于 Connection 对象,它必须从完成其类的实例化,并且它拥有一个重载的构造函数。

Dim sql As String = "select dname from dept where deptno = 10" ' VB.NETDim cmd As New OracleCommand(sql, conn)cmd.CommandType = CommandType.Textstring sql = "select dname from dept where deptno = 10"; // C#OracleCommand cmd = new OracleCommand(sql, conn);cmd.CommandType = CommandType.Text;

  不同的重载,语法的结构稍微有点不同。 Command 对象有用于执行命令文本的方法。 不同的方法适用于不同类型的 SQL 命令。

  检索标量值

  从数据库中检索数据可以通过实例化一个 DataReader 对象并使用 ExecuteReader 方法(它返回一个 OracleDataReader 对象)来实现。 通过将列名称或以零为基数的列序号传递给项属性 B.NET 开发人员可以访问返回的数据。 另一种选择是使用存取程序类型方法来返回列数据。

Dim dr As OracleDataReader = cmd.ExecuteReader() ' VB.NETdr.Read()Label1.Text = dr.Item("dname") ' retrieve by column nameLabel1.Text = dr.Item(0) ' retrieve the first column in the select listLabel1.Text = dr.GetString(0) ' retrieve the first column in the select list

  C# 开发人员必须使用存取器方法来检索数据。 有适当类型的存取程序用于返回 .NET 本地数据类型,其他的存取程序用于返回本地 Oracle 数据类型。 以零为基数的序号被传递给存取程序,以指定返回哪一列。

OracleDataReader dr = cmd.ExecuteReader(); // C#dr.Read();label1.Text = dr.GetString(0); // C# retrieve the first column in the select list

  在这个简化的例子中,dname 的返回值是一个字符串,它用来设置标签控件的文本的属性值(也是一个字符串)。 但如果检索的是 deptno,而不是字符串,那么将出现数据类型不匹配的情况。 当源数据类型与目标数据类型不匹配时,.NET 运行时将尝试隐式地转换数据类型。 有时数据类型不兼容,则隐式转换将失败,并跳出一个异常警报。 但即使可以进行隐式转换,使用显式数据类型转换仍比用隐式数据类型转换好。

  到整型的显式转换显示如下:

Label1.Text = CStr(dr.Item("deptno")) ' VB.NET integer to string cast

  在隐式转换上,C# 的容错能力不如 VB.NET。 您必须自己执行显式转换:

string deptno = dr.GetInt16("deptno").ToString(); // C#

  您可以显式地转换标量值以及数组。

  关闭并清除

  可以调用连接对象的 Close 方法或 Dispose 方法来关闭到数据库的连接。 Dispose 方法调用 Close 方法。

conn.Close() ' VB.NETconn.Dispose() ' VB.NETconn.Close(); // C#conn.Dispose(); // C#

  作为可选项,C# 提供了一种在连接超出范围时自动清除连接的特殊语法。 使用 using 关键字可启用这一特性。

using (OracleConnection conn = new OracleConnection(oradb)){conn.Open();OracleCommand cmd = new OracleCommand();  cmd.Connection = conn;  cmd.CommandText = "select dname from dept where deptno = 10";cmd.CommandType = CommandType.Text; OracleDataReader dr = cmd.ExecuteReader();  dr.Read();  label1.Text = dr.GetString(0);}

  您可以试验在上机操作 1(从数据库中检索数据)和上机操作 2(增加交互性)中学到的一些概念。

  错误处理

  Try-Catch-Finally 结构的错误处理是 .NET 语言的一部分。 下面是使用 Try-Catch-Finally 语法的一个相对最小的例子:

Dim conn As New OracleConnection(oradb) ' VB.NETTry  conn.Open()  Dim cmd As New OracleCommand  cmd.Connection = conn  cmd.CommandText = "select dname from dept where deptno = " + TextBox1.Textcmd.CommandType = CommandType.Text  If dr.Read() Then    Label1.Text = dr.Item("dname") ' or use dr.Item(0)  End IfCatch ex As Exception ' catches any error  MessageBox.Show(ex.Message.ToString())Finally  conn.Dispose()End TryOracleConnection conn = new OracleConnection(oradb); // C#try{conn.Open();OracleCommand cmd = new OracleCommand();  cmd.Connection = conn;  cmd.CommandText = "select dname from dept where deptno = " + textBox1.Text;cmd.CommandType = CommandType.Text;  if (dr.Read()) // C#  {    label1.Text = dr.GetString(0);  }}catch (Exception ex) // catches any error{  MessageBox.Show(ex.Message.ToString());}finally{  conn.Dispose();}
  虽然这种方法将适当地捕获尝试从数据库中获取数据时发生的任何错误,但这种方法对用户却不友好。 例如,看看下面这条在数据库不可用时显示的消息。

  

来源:http://www.tulaoshi.com/n/20160219/1613148.html

延伸阅读
关于 Ajax "Ajax" 表示 异步 Javascript 和 XML ,它是 "Web 2.0" 范型的核心。一种定义(Web 2.0 有多个定义)指出,Web 2.0 是可提高响应速率、提供丰富 UI 组件的新一代 Web 应用程序的简写,它使 Web 应用程序更贴近客户端-服务器桌面客户端的用户体验。Ajax 不是软件标准,而是对一组技术的描述,这些技术包括 JavaScript、文档对象模型 (D...
标签: Delphi
  13.3.2 数据控制部件         数据控制部件页上的部件,主要用于设计用户界面,对数据库中的数据进行浏览、编辑、插入、删除等操作。因而数据控制部件常常又被称为数据浏览部件,数据控制部件其实是在Standard页上的标准部件的基础上,相应地增加了数据浏览功能,使得它们能够显示和编辑数...
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。 表和视图 Oracle中表是数据存储的基本结构。ORACLE8引入了分区表和对象表,ORACLE8i引入了临时表,使表的功能更强大。视图是一个...
标签: ASP
  web.config文件是标准的xml文件,我们可以使用它来为一台机器下的每一个web应用程序或某个应用程序或一个目录下的asp.net页面来进行设置,当然,它也可以为一个单独的web页面进行设置。  如:网站的主目录是\inetpub\wwwroot\,那么我们将web.config放置于其下,那么这个网站中的应用程序将被web.config中的设置所影响。  e....
本文主要介绍用C# Builder通过ODBC访问数据。并将数据导出到Excel,下面以C# Builder Enterprise+Microsoft Access 2000+Microsoft Excel 2000为例。 1.建立数据库mydb,内建表:联系人 联系人ID 名字 姓氏 地址 城市 省份 [ 相关贴图 ] 2.建立ODBC(mydb) 3.编写程序 点击菜单 Fil...

经验教程

738

收藏

78
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部