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

2016-02-19 16:48 0 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。

  

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

  图 2: 使用 New Project 对话框

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

  添加引用

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

  

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

  图 3: 添加引用

  出现 Add Reference 对话框。

  

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

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

  

  图 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#

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

  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();}
  虽然这种方法将适当地捕获尝试从数据库中获取数据时发生的任何错误,但这种方法对用户却不友好。 例如,看看下面这条在数据库不可用时显示的消息。

  

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

延伸阅读
标签: Delphi
  13.1 数据库系统概述         数据库系统为我们提供了一种把与我们的工作和生活紧密相关的信息集合在一起的方法,它还提供了在某个集中的地方存储和维护这些信息的方法。数据库系统主要由三大部分组成:数据库管理系统(DBMS:它是专门负责组织和管理数据信息的程序)、数据库应用程序(它使...
关于 Ajax "Ajax" 表示 异步 Javascript 和 XML ,它是 "Web 2.0" 范型的核心。一种定义(Web 2.0 有多个定义)指出,Web 2.0 是可提高响应速率、提供丰富 UI 组件的新一代 Web 应用程序的简写,它使 Web 应用程序更贴近客户端-服务器桌面客户端的用户体验。Ajax 不是软件标准,而是对一组技术的描述,这些技术包括 JavaScript、文档对象模型 (D...
用Visual C++开发数据库应用程序 EMAIL:zzh1415@21cn.com 1、 概述 1、1 Visual C++开发数据库技术的特点 Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB、ADO等。这些技术各有自己的特点,它们提供了简单、灵活、访问速度快、可扩展性好的开发技术。 简单性 Visual C++中提供了MFC类库、ATL模板类以及Ap...
标签: ASP
3、设置不同子目录下应用程序的数据库链接  这是一个很有意思的方法,在设置前,先说明一下它的用途:  如果在一个虚拟目录下有多个子目录,每一个子目录下下的web应用程序都需要连接不同的数据库,这如何做呢??  一种方法是在每一个子目录下分别建立一个web.config,用它来设置这个目录下的数据库连接。但这种方法的问题...
本文主要介绍用C# Builder通过ODBC访问数据。并将数据导出到Excel,下面以C# Builder Enterprise+Microsoft Access 2000+Microsoft Excel 2000为例。 1.建立数据库mydb,内建表:联系人 联系人ID 名字 姓氏 地址 城市 省份 [ 相关贴图 ] 2.建立ODBC(mydb) 3.编写程序 点击菜单 Fil...

经验教程

786

收藏

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