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

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

阅读更多

在上一篇文章中介绍了.NET下使用Oracle数据提供程序访问Oracle的方法以及较老的数据库访问方式,ODBC,DAO,RDO等。总的说ODBC的出现使得程序员不必在关注与特定的数据库接口进行编程。而是利用数据库驱动来隐藏了不同数据库的差异,提供了统一的数据库编程接口。但是ODBC是C语言风格的接口,对于VB,ASP等程序无法直接使用,于是出现了DAO.RDO等面向对象的接口供程序员使用。

 

一 OLE DB
ODBC,DAO的表现在关系型数据库上已经很好了,但是随着数据的发展,非关系行的数据Excel,XML,邮件等的出现,使得ODBC无法对这些数据进行访问。而随着COM的发展,组件模型的思想也进入了数据库中,于是出现了OLE DB。全名是Object Linking and Embedding DataBase。对象连接与嵌入,简称OLE技术。OLE 不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象 ”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型。

      

OLE DB 建立于 ODBC 之上,并将此技术扩展为提供更高级数据访问接口的组件结构。此结构对企业中及 Internet 上的 SQL、非 SQL 和非结构化数据源提供一致的访问。OLE DB 由三个组件构成:数据使用者(例如,一个应用程序);包含并公开数据的数据提供程序以及处理并传输数据的服务组件(例如,查询处理器、游标引擎)。OLE DB 是一个针对 SQL 数据源和非 SQL 数据源(例如,邮件和目录)进行操作的基于COM的 API。

OLEDB的特点是他的多层组件结构,而最重要的就是她的数据提供程序,正式他隐藏了数据源的不同特征,使得应用程序可以访问关系和非关系型数据库。而各层之间通过Com通信。

 

二 ADO
OLE DB 为 C 和 C++ 程序员及使用其他包含 C 样式函数调用语言的程序员提供绑定。有一些语言(例如 VB 和 VBScript)不提供指针数据类型(地址变量)。因此,这些语言不能使用 C 样式绑定,而且不能直接调用 OLE DB。在此基础上,Microsoft 推出了另一个数据访问对象模型:ADO。ADO 采用基于 DAO 和 RDO 的对象,并提供比 DAO 和 RDO 更简单的对象模型(尽管会产生一些冗余的功能,如现在进行一项操作时可以用不止一种方法)。ADO 中的对象层次结构比 DAO 中的更平缓。ADO 包含一些简化对数据存储区数据的访问任务的内置对象。

 

从上图中可以很清楚的看到,C++直接使用OLEDB进行数据库操作与,而其他的语言是通过ADO数据库访问模型来调用OLEDB进行数据库访问。另外一个要注意的就是ODBC,可以看到一些数据库访问还是通过 ODBC进行,这是因为不是所有的数据库都支持OLEDB。其实C++也可以使用ADO进行访问,但是相比OLEDB他的层次更多。

ADO全称是Activex Data Object,Microsoft 希望拥有断开的数据访问机制,它扩展了 ADO 并推出远程数据服务 (RDS)。RDS 是按照 ADO 建模的,无需实时连接就可以使记录集传输到客户端(例如,Web 浏览器)。然而,如同 ADO 一样,RDS 使用 COM 封送处理将记录集从服务器传输到客户端。

而我也是从ADO开始接触数据库操作的,自己的第一个程序就是使用ADO操作Access,当然如果你还在使用VB等工具,ADO仍旧是你的选择,ADO参考手册:http://www.yesky.com/imagesnew /software/ado/index.html 、、

 

三 ADO.NET
从ADO到ADO.NET,不是简单的升级,而是完全的重构。从ODBC到ADO,从提供统一的数据库编程接口,到提供统一的数据库访问模型,实现了从低层到高层的抽象。但 ADO.NET 满足了 ADO 无法满足的三个重要需求:提供了断开的数据访问模型,这对 Web 环境至关重要;提供了与 XML 的紧密集成;还提供了与 .NET 框架的无缝集成。

   

图 7 显示了 ADO.NET 的结构。但缺少了能够在 ADO 中执行诸多功能的记录集对象。使用过ADO的应该知道 Recoder确实比较好用。而ADO.NET提供了3个代替的对象DataAdapter和DataReader 来获取数据。而 Connection和Command对象则提供了连接和操作数据库的对象。这4个主要对象就构成了.NET Data Provider。 而.NET类库自带的DataSet为离线数据提供了载体。

图 8 显示了应用程序通过 ADO.NET 连接数据库可采用的各种途径。对于SQL SERVER7及以上数据库,SQL Server .NET 数据提供程序通过表格数据流 (TDS) 协议直接和 SQL Server 通讯,而对于非SQL SERVER 数据库则使用OLE DB .NET 数据提供程序,在底层调用OLE DB提供程序来进行通信。这里或许大家有疑问,为什么不在.NET中直接使用OLE DB提供程序,而要增加一层OLE DB .NET 数据提供程序呢?正如前面说的,数据提供程序使得低层接口的统一,而这里是为了.NET中高层的接口也统一。也就是都是用图7中的那些对象进行操作。在使用OLEDB操作数据库时,实际是通过.NET和COM之间进行了相互操作。

 

从上图可以看出ADO.NET的模型,和OLEDB的很相似,有数据提供者和使用者,只是少了OLEDB中间的服务层,当然只是结构上类似而已。而与ODBC也比较相似,数据提供程序类似于数据库驱动。而ADO.NET相对于OLEDB的优势在于托管提供程序并不使用 COM Interop 桥梁来获取和设置数据。而且在数据使用层的 4个对象,也为在开发者提供了统一的变成模型(主要是早ADO.NET)。而对于不支持OLEDB的数据库,.NET仍旧提供了ODBC的数据提供者,来操作ODBC,但不应该使用OLEDB来访问ODBC数据源,因为他可能需要穿越OLEDB和ODBC两层。

现在我们在回头看看.NET中的数据提供程序,在System.Data命名空间下的, SqlClient,Oledb,ODBC,OracleClient。其中后两个是在.NET1.1中集成,而OracleClient在.NET4.0中被标记为了不建议使用。有了上面的了解,在看看OPD.NET,是不是有种豁然开朗的感觉。是否感觉和ODBC 的驱动程序很象。数据提供者可以很容易的被替换,我们要做的就是引入OracelDataAccess.dll来替代 OracleClient这个数据提供者。而在程序中,因为数据使用层的4个对象,统一的数据库的访问,所以我们甚至不需要修改代码就可以让程序很要的运行。(见前一篇的代码)

这里需要注意的是,ADO.NET2.0较之前的1.1,有的很大的变化。因为在1.1中,开发者在使用层,必须正对不同的数据库编写不同的代码,虽然只是吧SqlConnection修改为OledbConnction,但是如果更换数据源,代码需要进行修改,而且在对应多数据库上比较麻烦,而在ADO.NET2.0中,引入了工厂类,每种数据提供者都集成与基类DbProviderFactory工厂类。所以对于那些面向接口编程的代码,不需要修改就能很好的运行,而对于多种数据源的程序也提供了良好的解决方案。

 

四 LINQ 和 ADO Entity FrameWork

伴随着.NET平台,DataSet、DataTable、IList、XML,DBMS,等等众多的数据源,从中获得数据,也不在是那么容易;更为重要的是,作为一个C#程序员,你还必须熟悉SQL(如果SQL都不会,那就....), 但是我们也要注意到,不同的数据库,SQL不完全相同,虽然有标准SQL;而另外一个方面,在你写SQL时,如果写错一个符号,系统无法检测,只有在运行时才能发现,而且不会检查查询参数的类型,也不支持 IntelliSense ;正式基于这种情况,微软推出了LINQ。

语言集成查询 (LINQ) 使开发人员能够在应用程序代码中形成基于集合的查询,而不必使用单独的查询语言。您可以编写针对各种可枚举数据源(即实现IEnumerable接口的数据源)的 LINQ 查询,可枚举数据源包括驻留在内存中的数据结构、XML 文档、SQL 数据库和DataSet对象等。虽然这些可枚举数据源以多种方式实现,但它们都公开相同的语法和语言构造。由于可以使用编程语言本身形成查询,因此您不必使用编译器无法理解或验证的以字符串形式嵌入的其他查询语言。通过提供编译时类型和语法检查以及 IntelliSense ,将查询集成到编程语言也使 Visual Studio 程序员的工作更有效。这些功能降低了对查询调试和错误修复的需求。LINQ就是希望 "能够达成以单一的一种语法来查询多种不同的对象" 的目的。

 

其中,LINQ to SQL 是适合不需要映射到概念模型的开发人员使用的有用工具。通过使用 LINQ to SQL,您可以直接在现有数据库架构上直接使用 LINQ 编程模型。LINQ to SQL 使开发人员能够生成表示数据的 .NET Framework 类。这些生成的类直接映射到数据库表、视图、存储过程和用户定义的函数,而不映射到概念数据模型。

LINQ 和 ADO.NET:http://msdn.microsoft.com/zh-cn/library/bb399365.aspx

 


微软虽然有了ADO.NET这 个数据访问的利器,但却没有像NHibernate这样的对象对应工具,因此微软在.NET Framework 2.0发展时期,就提出了一个ObjectSpace的概念,ObjectSpace可以让应用程序可以用完全对象化的方法连接与访问数据库,其技术概念与NHibernate相当类似。

 

Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。
(1) 概念层:负责向上的对象与属性显露与访问。
(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。

从上面的图可以看出Entity Framework是构建于ADO.NET数据提供程序之上,在低层仍旧是ADO.NET中那一套对象,他为我们对于不同数据库提供了统一的访问方式,不同的是,我们不在需要自己手动的去书写代码。因为在上层,我们使用LINQ,也能以统一的方式来操作各做数据源。但是对于LINQ用的很少,而 Entity Framework还未使用过,所以就没办法过多介绍了。这也是下一步学习的目标了。

 

五 总结

写完了这两篇文章,看到了数据库访问技术,从最原始的面向特定数据库编程;到使用ODBC,OLE DB提供统一数据库访问接口;使用DAO,ADO,ADO.NET的提供高层更抽象的数据库访问对象;以及LINQ、Entity Framework提供更简单,更统一的数据访问模型。给我最大的感受就是软件的发展,或者可以说是软件的进化。其实所做的一切,就是为了统一,为了方便奥运会的口号,更高、更快、更强。我们软件则是更统一、更抽象、更简单。当然随之而来的问题就是封装的更深,我们这些程序员对底层的东西了解的越来越少。所以希望总结的这些东西能对大家有所帮助。真不知道以后的数据访问技术会是什么一个样子。

 

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

分享到:
评论

相关推荐

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

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

    .NET下连接ORACLE数据库组件

    .NET下连接ORACLE数据库组件

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

    在 .net 中使用 ODP.net 访问 Oracle 数据库可以不安装 Oracle 客户端,直接拷贝即可使用。下面将详细介绍如何在 .net 中使用 ODP.net 访问 Oracle 数据库。 首先,需要下载 Oracle Data Access Components (ODAC)...

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

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

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

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

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

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

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

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

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

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