`
wyf
  • 浏览: 435337 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

.NET下使用Oracle数据库、数据库访问技术(上)

阅读更多

最近做一个ASP.NET性能优化的小项目,目前还是在搭建测试环境,服务器使用WINDOWS2008,有2台AP server ,通过双网卡进行NLB组成集群,一台DB服务器,使用的是ORACLE 11g,然后客户还指出要使用ODP.NET。因为大多是使用的是SQL SERVER数据库,而以前接触ORACLE9i,10G时都是在Linux环境下,所以不太了解这个ODP.NET是个什么。 然后就查了查,发现好多东西都了解的不是很清楚,所以写篇文章吧了解到的写下来,可能有点杂碎吧。关于集群方面的等搭建完了在介绍介绍。

 

一 ODP.NET
ODP.NET全名是Oracle Data Provider,是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组件性能好,更可以访问UDT(User Defined Type)类型,Procedure,REF等等高级Oracle特性。目前最新的版本是11g。在Oracle的官方网站可以下载。不过我都是跟随ODAC包一起下载下来的,关于ODAC后面介绍吧。

使用过.NET连接Oracle的都知道。一般都是使用OLEDB或者是.NET中提供的OracleClient来进行连接。我记得在.NET1.0中好像是没有包含OracleClient,需要单独下载,然后1.1中就有了,记得当时MSDN上有写。而微软也宣称,从.NET4.0开始放弃对OracleClient的支持,但不会删除,标记为不建议使用。 所以可以使用ORACLE提供的ADO.NET访问组件ODP.NET,组件的名字为OracleDataAccess.dll,oracle的使用和OracleClient完全一样,在程序中添加DLL引用就可以使用:

+ expand sourceview plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
using (OracleConnection conn = new OracleConnection(WebConfigurationManager.ConnectionStrings["oracleODP"].ConnectionString))  
{  
    using (OracleCommand cmd = conn.CreateCommand())  
    {  
        cmd.CommandText = "select username, tel from demobs.test where username = '" + TextBox1.Text + "'";  
        conn.Open();  
        OracleDataReader reader = cmd.ExecuteReader();  
        if (reader.Read())  
        {  
            TextBox1.Text = reader.GetString(1);  
        }  
    }  

            using (OracleConnection conn = new OracleConnection(WebConfigurationManager.ConnectionStrings["oracleODP"].ConnectionString))
            {
                using (OracleCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select username, tel from demobs.test where username = '" + TextBox1.Text + "'";
                    conn.Open();
                    OracleDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        TextBox1.Text = reader.GetString(1);
                    }
                }
            }

上面一段代码,无论你使用OracleDataAccess.dll还是OracleClient.dll她都能正常工作,唯一不同可能是连接字符串的一点点区别了。

view plaincopy to clipboardprint?
 <add name="oracle" connectionString="Data Source=CCDB;User Id=demobs;Password=demobs;Integrated Security=no;" providerName="System.Data.OracleClient"/> 
      
<add name="oracle1" connectionString="SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.132.128)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=CCDB)));uid=demobs;pwd=demobs; " providerName="System.Data.OracleClient"/> 
      
<add name="oracleODP" connectionString="Data Source=CCDB;User Id=demobs;Password=demobs;" providerName="Oracle.DataAccess.Client"/> 
 <add name="oracle" connectionString="Data Source=CCDB;User Id=demobs;Password=demobs;Integrated Security=no;" providerName="System.Data.OracleClient"/>
   
<add name="oracle1" connectionString="SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.132.128)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=CCDB)));uid=demobs;pwd=demobs; " providerName="System.Data.OracleClient"/>
   
<add name="oracleODP" connectionString="Data Source=CCDB;User Id=demobs;Password=demobs;" providerName="Oracle.DataAccess.Client"/>

其中第一个是OracleClient时使用的连接字符串,data source是在oracle客户端文件中配置的,第2个一样,只不过吧配置文件中的内容拿了出来,第3个是用于ODP.NET的链接字符串,其实没什么区别,只是不支持Inregrated Security。具体有什么差别,我也不知道,没有研究,网上挺多的。我也是搜索出来的。

 

二 ODAC
一看和ODBC很象啊,不过不是同一个东西。Oracle Data Access Components(ODAC)是一个提供原生的连接到Oracle的组件。他和OPD.NET有什么关系呢?实际OPD.NET只是ODAC的一部分。还包括了 Oracle Providers for ASP.NET, Oracle Provider for OLE DB 、 Oracle ODBC Driver、 Oracle SQL*Plus、 Oracle Instant Client以及 Oracle Developer Tools for Visual Studio。也就是说ODAC提供了用于WINDOWS访问ORACLE的一套组件,而不仅仅是.NET使用。

其中for ASP.NET主要是用于ASP.NET2.0版本开始提供的Member ship等功能,在安装完成ODAC后,如果需要这些功能,可以运行安装目录下ASP.NET文件夹中的SQL脚本(实际就是在数据库中建立相应的表)。Oracle Instant Client是oracle的客户端,因为和服务器通信是需要客户端的,关于客户端下面介绍。而 Oracle Developer Tools for Visual Studio是一个TOOL,安装后,你可以象SQL SERVER一样,在VS中连接了。

关于ODAC下载和详细信息:http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html

目前最新的是Oracle 11g ODAC 11.1.0.7.20 ,可以连接9.2以上版本,大小为200M左右。

 

三 Oracle客户端
说到使用Oracle数据库,就不能不说Oracle客户端。Oracle是使用TCP/IP协议通信的。而客户端的功能就是负责和服务器通信。在Oracle11g以前,在安装完整的企业版时,可以选择是安装服务器还是客户端,但是在Oracle 11g中已经没有了,但是有单独的客户端下载。而ODAC中可以看到一个Oracle Instant Client,这个就是一个小型的客户端,其中包括了比较重要一个DLL,就是OCI.DLL,全名是Oracle Call InterFace

 

从上图可以看出,我们的程序都是通过OCI的API和Oracle进行通信的,OCI是一个应用程序接口,允许应用程序开发者使用一个第三代语言的原生过程或函数调用访问Oracle数据库服务器,并控制所有阶段的SQL语句执行。OCI是一个标准的数据库访问和索引功能库,以动态连接库的方式提供。 所以在如果没有Oracle客户端,OPD.NET也无法访问数据库,OPD.NET也只是把SQL发送给OCI,从OCI中取得数据。

如果我们下载了ODAC,那么一切都搞定了。因为她集成了最小客户端环境。只是缺少了一些网络配置工具和管理工具。其实在Oracle还提供Oracle Instant Client单独下载,大小只有40,50M,适合大批量部署客户端。不过需要手动的配置和修改注册表。对于开发来说,还是使用ODAC方便。如果系统中安装了其他版本的客户端,建议删除,我不清楚能否共存。不过还是删除比较好,免得发生奇怪的错误。

当然凡事都有例外,Oracle的Sql Developer就不需要安装客户端(11g已集成此工具),好像是通过java的thin直接连接服务器,JAVA我也不明白,这里就提一下,不过感觉还是没有PL/SQL好用,但是PL/SQL需要客户端。

最后就是系统的连接数据库的配置了,我们只用配置\oracle\product\11.1.0\client_1\Network\Admin下的tnsnames.ora文件。这里是设置服务器的监听信息。在Sample目录中有列子。写的很明白,这里就不介绍了。配置好以后,在PL/SQL或VS中的数据库或data source中可以看到并选择。而我们上面的Web.config中的配置的data source名也是我们这里设置的名字。这样就可以和服务器正常通信了。

 

四 ODBC
前面都是介绍的.net下使用Oracle的一些相关的东西,下面就看一下更深入的东西。其实我也不了解的很深,边学边卖吧!说到数据库连接,ODBC,OLEDB,ADO,ADO.NET是我们经常听说的东西。那么什么是ODBC呢?

 

上面是有关ODBC的一个结构图。一下是摘抄于Oracle的Odbc帮助文档

About Oracle ODBC Driver

Open Database Connectivity (ODBC) provides a standard interface that allows one application to access many different data sources. The application's source code does not have to be recompiled for each data source. A database driver links the application to a specific data source. A database driver is a dynamic-link library that an application can invoke on demand to gain access to a particular data source. Therefore, the application can access any data source for which a database driver exists.

ODBC也是一个数据访问的提供者,他允许一个程序可以访问不同的数据源,而不需要重新编译。其中数据库驱动成为了程序和数据源之间的桥梁,不同的驱动对应不同的数据源。只要提供了相应的驱动,程序就可以访问任何数据库。当应用程序改变它的 DBMS 时,开发人员只使用新的 DBMS 驱动程序替代旧的驱动程序,并且应用程序可以照常运行 ; 无需修改代码。从上图看,当一个程序要连接到一个数据源时,通过ODBC的API向驱动管理区发送请求,然后驱动管理器根据请求选择驱动,通过网络连接到数据库。

 

上图是一个详细的访问过程,我们可以看到Oracle的ODBC驱动是一个名为SQORA32的DLL文件,然后这个驱动调用OCI(前面介绍过了)来和服务器通信。我们在去看看系统中的ODBC数据源管理。可以看到,还有SQLSRV32.DLL、OBJECT32.DLL等文件,他们则是负责连接到SQL SERVER,ACCESS/EXCEL等数据源的驱动。另外一个文件是MSORCL32.DLL,这个是微软提供的访问oracle的驱动。

 

而DSN是Data Source Name,在我们安装完ODBC驱动之后,就需要配置DSN来使用ODBC,这里的配置就行设置一个驱动去访问那些数据源,TNS信息,以及一些比如连接超时,缓存大小等。在看看我们在.NET中使用ODBC时的链接字符串,其中就需要指定驱动,服务器,数据库已经用户和密码。如果配置了DNS,可以只指定DSN,而无需指定驱动。记得自己写的第一个程序,就是VB在ADO中使用DSN连接到了ACCESS。

view plaincopy to clipboardprint?
Driver={Sql Server};SERVER=MYSERVER;UID=sa;PWD=123;Database=northwind 
Driver={Sql Server};SERVER=MYSERVER;UID=sa;PWD=123;Database=northwind

其他参考:http://www.hudong.com/wiki/ODBC

 

五 DA0和RDO

ODBC 使用低层接口,因此 C 和 C++ 程序员是真正从 ODBC 技术受益最多的人。Visual Basic (VB) 程序员没有一种简单的方法来访问 ODBC 接口。在 VB 6.0 之前,开发人员不得不依赖一种较高级别的数据访问模式。下图 显示了 VB 程序员如何用数据访问对象 (DAO) 访问数据库。

         

DAO 是建立在 Microsoft Jet Microsoft Access 的数据库引擎基础之上的。Jet 是第一个连接到 Access 的面向对象的接口。使用 Access 的应用程序可以用 DAO 直接访问数据库。由于 DAO 是严格按照 Access 建模的,因此,使用 DAO 是连接 Access 数据库最快速、最有效的方法。DAO 也可以连接到非 Access 数据库,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由于 DAO 是专门设计用来与 Jet 引擎对话的,Jet 将解释 DAO 和 ODBC 之间的调用。使用除 Access 之外的数据库时,这种额外的解释步骤导致较慢的连接速度。

要克服这样的限制,Microsoft 创建了 RDO。图 3 显示了 RDO 如何直接访问 ODBC API,而无需通过 Jet 引擎。不久之后,Microsoft 推出了 ODBCDirect,它是 DAO 的扩展,在后台使用 RDO。图 4 显示 ODBCDirect 如何允许现有的 DAO 应用程序访问数据库,而没有 Jet 引擎产生的性能损失。

以上来自于微软的MSDN,可见,ODBC是一个底层的接口,对于VB等不直接和底层打交道的语言,要使用ODBC就需要有个中间件,DAO和RDO就充当了这样的角色。DAO是一个面向对象的接口,是的我们在VB中通过DAO对象来调用ODBC和数据库打交道。而VC中的MFC等也提供了对DAO的封装。所以作为程序员,只需要了解DAO,而无需了解ODBC,以及各数据库的区别,就能对多种数据库进行开发。而数据库JET引擎则负责吧DAO操作转换为对各种数据库的物理操作。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cc_net/archive/2009/10/28/4740054.aspx

分享到:
评论

相关推荐

    vb.net操作Oracle数据库增删改查以及存储过程调用1

    在本篇文章中,我们将详细介绍如何使用 VB.NET 操作 Oracle 数据库,包括增删改查操作以及存储过程的调用。 VB.NET 操作 Oracle 数据库的准备工作 在开始操作 Oracle 数据库之前,我们需要首先安装 Oracle 客户端...

    net中使用ODP.net访问Oracle数据库(无客户端部署方法)

    ODP.net 是 Oracle 提供的数据库访问类库,其功能和效率上都有所保证。在 .net 中使用 ODP.net 访问 Oracle 数据库可以不安装 Oracle 客户端,直接拷贝即可使用。下面将详细介绍如何在 .net 中使用 ODP.net 访问 ...

    .NET下连接ORACLE数据库组件

    .NET下连接ORACLE数据库组件

    .NET中关于Oracle数据库连接访问技术研究.pdf

    总结来说,.NET中访问Oracle数据库的技术涉及了数据源的配置、驱动的安装以及相应的API使用。理解并熟练掌握这些连接方式,对于开发者来说至关重要,能够有效提高数据库操作的效率和项目的可靠性。在进行.NET与...

    基于ADO.NET技术访问Oracle数据库的实现.pdf

    基于ADO.NET技术访问Oracle数据库的实现 一、概述 ADO.NET是当前.NET编程中的优先数据库访问技术,Oracle是安全性、可靠性等方面具有突出优势的数据库系统。本文将介绍ADO.NET的体系结构、访问数据库的两种方式和...

    Asp.Net访问Oracle数据库的方法.pdf

    安装完成后,可以使用 .NET for Oracle 组件来访问 Oracle 数据库。使用 .NET for Oracle 组件可以实现对 Oracle 数据库的基本操作,如创建、删除、修改和查询等。 本文主要介绍了 Asp.Net 访问 Oracle 数据库的...

    asp.net 中使用oracle数据库事务

    ### ASP.NET 中使用 Oracle 数据库事务 #### 一、引言 在 ASP.NET 应用程序中集成 Oracle 数据库,并实现高效且可靠的事务处理是非常重要的。事务管理是确保数据一致性和完整性的重要手段之一,尤其是在涉及多条 ...

    VB.NET编写的ORACLE数据库线程查询工具

    总之,“VB.NET编写的ORACLE数据库线程查询工具”结合了VB.NET的强大编程能力、ORACLE数据库的高效处理以及多线程技术的优势,为用户提供了一种高效且用户友好的数据查询解决方案。通过这样的工具,开发者和用户都能...

    .net 程序链接Oracle数据库Demo

    本Demo主要展示了如何使用.NET技术与Oracle数据库进行交互,实现数据的增删查改操作。以下将详细介绍相关知识点。 1. **Oracle 数据提供者(Oracle Data Provider for .NET, ODP.NET)** ODP.NET是Oracle公司提供...

    不用装Oracle客户端实现C#.NET连接远程Oracle数据库的一种方法

    本文将详细介绍一种无需安装Oracle客户端,仅使用C#.NET就能连接远程Oracle数据库的方法,这对于轻量级的开发环境或者不希望安装大型客户端的场景尤其适用。 首先,你需要下载Oracle的数据提供程序,即Oracle Data ...

    VB.NET连接ORACLE数据库

    首先,**Oracle.ManagedDataAccess** 是Oracle公司为.NET应用程序提供的一种管理型数据访问客户端,它允许开发者在不依赖Oracle客户端软件的情况下直接与Oracle数据库通信。这个库包含了对Oracle数据源的所有必需...

    c# asp.net 读取 连接oracle数据库源码(不用安装oracle客户端)

    Oracle数据库是一种广泛应用的关系型数据库管理系统,而C#和ASP.NET则是微软.NET框架下用于构建Web应用程序的主要编程语言和平台。本示例"OracleTest"展示了如何在C# ASP.NET环境中,无需安装Oracle客户端就能实现对...

    ADO.NET访问Oracle数据库类,及DBHelper

    在本案例中,`OraDBHelper.cs` 是一个自定义的C#类,它封装了使用ADO.NET连接和操作Oracle数据库的方法。`System.Data.OracleClient.dll` 是Oracle数据库驱动程序,它是ADO.NET框架的一部分,用于与Oracle数据库建立...

    VB.NET连接oracle数据库

    Oracle提供了一个名为ODP.NET(Oracle Data Provider for .NET)的数据访问组件,它允许.NET开发者直接与Oracle数据库进行交互。在Visual Studio中,可以通过NuGet包管理器安装“Oracle.ManagedDataAccess”来获取...

    VS.Net2005连接Oracle数据库

    ODAC是Oracle提供的.NET数据访问组件,它包含了Oracle Provider for .NET,使得.NET应用程序能够与Oracle数据库进行交互。ODT with ODAC则包含了一整套开发工具,便于在VS.NET中进行Oracle数据库的开发。 **步骤1:...

    ASP.NET连接Oracle数据库完整实例(简单实例)

    ASP.NET连接Oracle数据库实例程序,根据sql.txt创建数据表后,更改WEB.config文件中Oracle字符串连接符中的数据库UID及PASSWORD,或许还需要再次引入System.Data.OracleClient,有问题可留言我

    asp.net与Oracle数据库进行增删改查

    在与Oracle数据库进行交互时,ASP.NET通常利用ADO.NET(一个.NET Framework的数据访问组件)来实现数据的增删改查操作。 在"asp.net与Oracle数据库进行增删改查"这个主题中,我们将探讨以下几个关键知识点: 1. **...

    基于.NET的oracle数据库访问程序

    本项目"基于.NET的Oracle数据库访问程序"利用C#实现了对Oracle数据库的全面操作,包括查询、修改、删除和插入数据。Oracle数据库是企业级的关系型数据库管理系统,广泛应用于大型企业和组织。 1. **C#语言基础**: ...

    Abp项目模板使用Oracle数据库

    在这个“Abp项目模板使用Oracle数据库”的场景中,开发者已经将Abp框架与Oracle 11g数据库集成,以便利用Oracle的强大功能来存储和管理应用程序的数据。Abp.Zero是Abp框架的一个子模块,主要关注多层架构中的基础...

    .NET连接Oracle数据库.docx

    使用Oracle官方提供的Oracle.ManagedDataAccess (OMDA) 数据库提供程序,不仅能够确保与Oracle数据库的稳定连接,还能享受到最新的功能和技术支持。通过上述步骤,开发人员可以在.NET环境中高效地连接和操作Oracle...

Global site tag (gtag.js) - Google Analytics