在上一篇文章中介绍了.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 不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象 ”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部 件对象模型。

 

OLEDB      OLEDB

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

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

继续阅读

最近做一个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引用就可以使用:

            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她都能正常工作,唯一不同可能是连接字符串的一点点区别了。

继续阅读