使用OracleClient,OLEDB,ODBC,Visual Studio,ODP.NET 来连接 Oracle访问数据库

---下面是OracleClient

下面也要介绍的是通过 System.Data.OracleClient 来完成 ASP.NET 页面访问 Oracle 数据库,

其实呢,还是比较简单的,

首先介绍一下环境吧,

我机器装的是 Oracle 10g R2 的版本,

image

要完成 ASP.NET 访问 Oracle 事实上,对 Oracle 还是有一些设置的,

看下面的一个截图里面的两个文件吧

image

在上面标识的两个文件中完成机器名,IP 地址这些的设置,

设置可按如下进行

image

设置好了以后便可以来实现通过 OracleClient 对 Oracle 数据库的访问了,

先来看连接 Oracle 的字符串设置吧,

image

从上面可以看到,其实连接字符串和链接 Access 或者是 Sql Server 是基本一样的,

其中 Data Source 呢,就是指定数据库名,当创建 Oracle 数据库时指定的数据库,

User ID 和 Password 就不要解释了吧,

从中可以看出我是使用的 Oracle 的预定义用户 scott 来访问的,

设置好了连接字符串后,便是写一个页面来访问 Oracle 数据库了,

页面的基本功能介绍如下,

image

第一次加载时便将 Oracle 数据库中的数据加载到 DropDownList 中显示,

并且呢,用户可以通过选择一个 DropDownList 中的用户姓名来得到该用户的所有信息,

功能是很简单的(因为主要是实现访问 Oracle 数据库吗)

再看 Code-Behind 吧

image

image

image

以上呢就是 Code-Behind 部分了,其实呢,除了一些调用的方法不同外,

基本上就是使用 ADO.NET 访问 Sql Server 啦,

然后就是看效果了,

image

再来看 Oracle 吧,

因为我是使用的 SCOTT 用户来访问的 Oracle ,而 Oracle 呢在安装的时候会自动建立一个 Emp 表,

上面的这个 Demo 就是通过 SCOTT 用户来访问这个 EMP 数据表的,

image

从上面就可以看出这个 Emp 表的结构了,

然后再来看一下里面的数据吧,

也来查看一下用户 WARD 的基本数据吧,

image

从上面这幅截图中便可以得到上面通过 ASP.NET 页面的数据了,可以看到数据是一样的,

---下面是odbc,

说实在的,使用 OracleClient ,Oledb ,Odbc 访问 Oracle 数据库,

都比较简单,无非就是注意一下这个数据库连接字符串就 OK 了,

下面就给出数据库连接字符串吧

image

然后再来看 Demo 的 Code-Behind

image 

很简单的一个 Demo ,就是使用 ODBC 从 Oracle 数据库中访问 EMP 数据表,

然后将这个表中的数据全部取出,并且绑定到一个 GridView 上面显示就 OK 了,

效果就是

image

到这里,便成功取得了 Oracle 中的数据了!!!

 

---下面是oledb,

好像微软宣称从 .NET 4.0 开始将放弃对 OracleClient 的支持,

所以接下来的博文还是会介绍更多的 .NET 访问 Oracle 数据库的方法,

其实访问 Oracle 数据库有很多种方法,比如使用 ODBC 实现,

或者是 OracleClient 实现,或者是 Oledb 实现,

又或者是通过 Oracle 给出的 Oracle Data Provider for .NET (ODP.NET) 来完成,

至于最后一个 ODP.NET 的话,必须另外加 Oracle 提供的组件了,

还有一个比较有趣的东西就是可以通过 Oracle 提供的 Oracle Developer Tools for Visual Studio,

这个东西您安装以后,就可以像 Sql Server 一样,在 Visual Studio 中直接访问 Oracle 数据库了,

不过这一篇博文还先只介绍 Oledb 吧,

由易到难,到后面再介绍其他的一些访问 Oracle 数据库的方法,

其实使用 Oledb 访问 Oracle 数据库很简单的,和上一篇博文中使用 OracleClient 访问一样,

只是在一些基本的方法和类上不一样而已,而后就是连接数据库的连接字符串稍微有一点变化,

还有值得一提的是,在 OracleClient 访问 Oracle 数据库时,

不需要太多 Oracle 数据库中的数据类型,

因为在 OracleClient 中都有专门针对 Oracle 数据库中类型的一些获取值的方法,

例如

image

而在 Oledb 中访问 Oracle 时,就必须控制好数据类型的转换,

例如

image

下面就来看 Demo 了,

先看一下连接字符串吧

image

这个  Demo 实现的功效和前一篇使用 OracleClient 访问 Oracle 数据库时 Demo 的效果是一样的,

也是通过 SCOTT 用户登录,然后访问数据库中的 EMP 数据表,得到数据,

image

image

image

从上面可以看到其实这个 Demo 和上一个 Demo 真的没有什么变化,

Visual Studio 来连接 Oracle

 

首先还是先来看一下我的一些环境吧,

操作系统是 Win 7 旗舰版,

Oracle 版本为 Oracle 10g R2 ,

Visual Studio 为 Visual Studio 2008,

前面介绍的呢都是通过手工编写 Oracle 数据库连接字符串来完成的访问 Oracle 数据库,

其中介绍了 OracleClient ,Oledb ,ODBC 这三类方法,

其实呢,对 Oracle 的操作并没有想象中的那么复杂,

尤其是当 Oracle 公司提供了在 Visual Studio 下的一些插件的使用下就显得更加容易了,

这使得您在 VS 下对 Oracle 的操作有些类似于对 Sql Server 的操作了,

其实呢,VS 对 Oracle 的访问有三种数据提供程序,

一种是:用于 Oracle 的 .NET Framework 数据提供程序

一种是:用于 OLEDB 的 .NET Framework 数据提供程序

一种是:Oracle Data Provider for .NET

其中第三种呢,您必须先安装由 Oracle 提供的 ODP.NET 才能够实现访问,

这个呢将会在后面的博文中介绍,

必须要提及的是,您要完成在 VS 中访问 Oracle 数据库的话,

你必须先将 Oracle 数据库配置好,

常见的一些配置错误主要是对

D:\oracle\product\10.2.0\db_1\network\ADMIN

这个目录下的两个文件的配置

image

这两个文件的配置至关重要,其中 listener.ora 是用户指定监听服务的一些信息的,

如果这个文件设置不正确的话,将有可能导致监听服务无法启动,

简单起见,直接把里面的东西截个图吧,

image

主要是要将 HOST 设置好,

而后就是要配置好 tnsnames.ora

这个文件也非常重要,其直接涉及到您的 VS 或者是应用程序能否访问到 Oracle 数据库,

image

其中的设置说明是,HOST 用来指定 Oracle 服务器所在的主机名或者 IP 地址,

而 SERVICE_NAME 则指定全局数据库名,

一般来说,经过下面两个步骤就可以判断出您的上面的两个文件是否设置正确了,

首先是您设置好上面的两个文件以后,您就重新启动监听服务,

image

如果监听服务能够正常启动的话,说明配置文件 listener.ora 配置基本正确,

而后的话,您可以通过 tnsping 数据库名 来判断 tnsnames.ora 的配置是否正确,

比如我的全局数据库名为 Oracle ,

我就通过 tnsping Oracle 来判断 tnsnames.ora 的配置是否正确,

image

如果得到上面的类似结果,则说明这个配置文件时正确的,

现在就来看前面的两种方式吧,

image

然后我新建一个连接

image

更改数据源(先使用”用户 Oracle 的 .NET Framework 数据提供程序”)

image

image

其中 Oracle 是用来指定要连接的 Oracle 数据库的名字的

完成后可以看到

image

下面就来看一个 Demo 来对上面的设置进行一个测试

Demo 很简单就是一个页面上放一个 GridView ,

然后将 Oracle.SCOTT 中的 EMP 表中的数据全部绑定上去进行显示,

直接看效果就可以了

image

image

---------------------------------------------华丽的分隔线-----------------------------------------

---------------------------------------------华丽的分隔线-----------------------------------------

---------------------------------------------华丽的分隔线-----------------------------------------

上面呢是介绍了使用数据提供程序中的第一种完成访问 Oracle 的任务,

而后就是要介绍 用于 OLEDB 的 .NET Framework 数据提供程序了

和前面一样,先添加一个与 Oracle 数据库的连接,

只不过这次使用的数据提供程序时 用于 OLEDB 的 .NET Framework 数据提供程序了

image

我仍然以 scott 用户进行访问 Oracle 数据库,

image

连接成功后可以看到

image

再看一个 Demo 来实现通过这个数据库的连接来访问 Oracle 数据库

这个 Demo 呢和上一个 Demo 没有区别,都是通过访问 Oracle 得到 EMP 表中的数据,

这里就不做演示了,

 

 

---下面是ODP.NET 访问 Oracle 数据库要相使用 Oracle Data Provider For .NET(ODP.NET)

必须先安装 ODP.NET 或者是 ODAC(Oracle Data Access Components)

(ODAC 中包含 ODP.NET 这个组件)

最好是把 ODT.NET 也安装上,这样,以后在 Visual Studio 中开发 Oracle 应用程序会方便很多的,

还是提供一个下载地址吧,

http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html

如果还没有安装的朋友请参考笔者前面的一些博文,其中都有比较好的介绍的,

本篇博文呢,将会完成一个 Demo ,这个 Demo 呢是从 Sql Server 中取出指定的数据表中的数据,

然后逐条将这些取出的数据插入到 Oracle 数据库中的指定表中,

其中呢,对 Sql Server 数据库的访问我就不说了,

对 Oracle 的访问呢,主要是通过 ODP.NET 来实现的,

前面的一篇博文<<通过 Reflector 工具来查看 ODP.NET 提供的类等信息>>

介绍了ODP.NET 中的一些类和命名空间,

在这一篇博文中就是使用这些类来完成 Demo ,当然涉及的类将会是很简单的最基本的类,

也就是 Connection,Command ,DataAdaptor 这些,

如果您需要使用 ODP.NET 下的其他一些类的话,

可以使用 Reflector 来反射出 Oracle.DataAccess.dll 中的内容,

首先要想在应用程序中使用 ODP.NET 来访问 Oracle 数据库的话,

您必须向当前的应用程序添加一个引用,

5

这个 Oracle.DataAccess 必须是在您安装了 Oracle Data Provider For .NET 后才可以引用,

6

添加了这个引用后,便可以来使用 Oracle.DataAccess 这个命名空间和其子内容了,

先来看页面设计吧,

image

其中对 SqlDataSource 进行的数据绑定操作按如下顺序进行

其中 SCOTT.ORACLE 便是我通过 ODP.NET 来与 Oracle 建立的一个数据库连接,

1

2

3

4

然后就是来看一下 Web.config 中的数据库连接字符串的设置吧

image

其中呢,包括一个 Oracle 数据库连接字符串(OracleScott)

也包括一个 SqlServer 数据库连接字符串(SqlServerCon)

然后就来看 Code-Behind 了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using Oracle.DataAccess;

using System.Web.Configuration;

namespace WebForm
{
    public partial class Demo__39 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnAddData_Click(object sender, EventArgs e)
        {
           
//获取 web.config 中的连接 SqlServer 数据库的字符串
            string sqlServerConStr =
                WebConfigurationManager.ConnectionStrings["SqlServerCon"].
                ConnectionString;
           
//获取 web.config 中连接 Oracle 数据库的字符串
            string oracleConStr =
                WebConfigurationManager.ConnectionStrings["OracleSCOTT"].
                ConnectionString;

           //先是取出 SQL Server 中的数据,并且存放在 DataSet 中
            DataSet ds = new DataSet();

            using (SqlConnection sqlCon = new SqlConnection(sqlServerConStr))
            {
                using (SqlCommand sqlCom = sqlCon.CreateCommand())
                {
                    string sqlStr =
                        "SELECT 员工号码,姓名,性别,目前工资 FROM 章立民研究室";
                    sqlCom.CommandType = CommandType.Text;
                    sqlCom.CommandText = sqlStr;
                    using (SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom))
                    {
                       
//将数据全部存入 DataSet 数据集中
                        sqlDA.Fill(ds);
                    }
                }
            }
            using (OracleConnection oracleCon = new OracleConnection(oracleConStr))
            {
                oracleCon.Open();
                using (OracleCommand oracleCom = oracleCon.CreateCommand())
                {
                   
oracleCom.CommandType = CommandType.Text;
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                       
//从 DataSet 逐条检索数据并且存储到 Oracle 数据表 Employee
                        string sqlStr = String.Format(
                            "INSERT INTO EMPLOYEE(EMPID,EMPNAME,EMPSEX,EMPSALARY) " +
                            "VALUES({0},'{1}','{2}',{3})",
                            ds.Tables[0].Rows[i][0],
                            ds.Tables[0].Rows[i][1],
                            ds.Tables[0].Rows[i][2],
                            ds.Tables[0].Rows[i][3]);
                        oracleCom.CommandText = sqlStr;

                        oracleCom.ExecuteNonQuery();
                    }
                }
            }

            //只能从数据库中取一次数据
            btnAddData.Enabled = false;
        }
    }
}

下面就来看效果了,

下面的截图是还没有从 Sql Server 中拷贝数据到 Oracle 数据库之前,

Oracle 中本来的数据,

image

执行拷贝数据后的结果为

image

image

如此便成功实现了使用 ODP.NET 访问 Oracle 数据库了!!!

 

 

 

 

 

posted @ 2010-08-02 13:57  你妹的sb  阅读(9298)  评论(4编辑  收藏  举报
百度一下