[转载].net 访问oracle的总结
长期以来,我一直用的是 MS SQL Server / Access 数据库,通过.NET 访问MS自家的东西几乎没碰到过什么麻烦。最近项目中要用 Oracle 作为数据库,学习研究了一些 .NET 访问Oracle 的东西,发现问题倒真的不少。
1。System.Data.OracleClient 和 System.Data.OleDb 命名空间
虽然通过这两个命名空间的类都可以访问 Oracle 数据库,但和 SQL Server 类似的(System.Data.SqlClient 命名空间的类效率要比 System.Data.OleDb 命名空间中的类高一些),System.Data.OracleClient 命名空间中的类要比 System.Data.OleDb 命名空间的类效率高一些(这一点我没有亲自验证,但大多数地方都会这么说,而且既然专门为 Oracle 作的东西理论上也应该专门作过针对性的优化)。
当然还有另一点就是从针对性上说,System.Data.OracleClient 要更好一些:
比如数据类型,System.Data.OleDb.OleDbType 枚举中所列的就没有 System.Data.OracleClient.OracleType 枚举中的那些有针对性;另外,Oracle 的Number 类型如果数字巨大,超出 .NET 数据类型范围的情况中,就必须使用System.Data.OracleClient 中的专门类 -- OracleNumber 类型。
好了,不再赘述这两个的比较,下面主要讨论System.Data.OracleClient 命名空间中的类型,即 ADO.NET for Oracle Data Provider (数据提供程序)。
2。数据库连接:
无论是 System.Data.OleDb 还是 System.Data.OracleClient 访问 Oracle 都需要在 .NET 运行的机器(ASP.NET 中就是 Web 服务器)安装 Oracle 客户端组件。(这一点是和 MS 的两种数据库不同的,MS 的东西安装 MDAC: Microsoft Data Access Component 2.6 以上版本后,就无须再安装 SQL Server 客户端或者 Office 软件,就能访问。)
System Requirements:
(1) 如用 System.Data.OracleClient 访问 Oracle,客户端组件版本应在 Oracle 8i Client Release 3 (8.1.7)以上版本。MS 只确保访问 Oracle 8.1.6、Oracle 8.1.7、Oracle 9i 服务器时的情况。MDAC 2.6 以上。
(2)如用 System.Data.OleDb 访问 Oracle,客户端组件版本 7.3.3.4.0 以上或 8.1.7.4.1 以上。MDAC 2.6 以上。
如服务器为 Oracle8i 以上,客户端组件版本应为 8.0.4.1.1c。
在 .NET 运行的机器中,安装 Oracle 客户端,然后打开 Net Manager (Oracle 9i) / Easy Config (Oracle 8i) 按你以前的经验设置本地服务的映射(这里的服务名将用于数据库连接串)。
System.Data.OracleClient 中访问 Oracle 数据库的连接串是:
User ID=用户名; Password=密码; Data Source=服务名
(上述为一般的连接串,详细的连接串项目可以在 System.Data.OracleClient.OracleConnection.ConnectionString 属性的文档中找到。)
System.Data.OleDb 中的访问 Oracle 数据库的连接串是:
Provider=MSDAORA.1; User ID=用户名; Password=密码; Data Source=服务名
关于访问方式的总结
我在查看ORACLE网站、MSDN2005及注册表之后,小有收获,特写此文,希望对各位有所帮助。
好了,废话结束,现在看正文:1.ODBC方式
我们可以在 "我的电脑-> 控制面板-> (性能和维护-> )管理工具-> 数据源(ODBC)-> 系统DSN-> 添加 ",查看系统中已经安装好的ODBC驱动,其中就包含了“Microsoft ODBC Driver for Oracle”。
所以,如果用ODBC方式来访问ORACLE,可以不用安装ORACLE CLIENT;
2.OLEDB方式
请大家打开注册表编辑器regedit,搜索oracle即可以搜索到以下键:
Microsoft OLE DB Provider for Oracle
HKEY_CLASSES_ROOT\CLSID\{e8cc4cbe-fdff-11d0-b865-00a0c9081c1d}\OLE DB Provider
HKEY_CLASSES_ROOT\MSDAORA
所以,只要你安装了合适版本的MDAC,那么起码就已经可以使用OLEDB来访问ORACLE了。
3.System.Data.OracleClient方式
以上2种都是比较通用的方式,我们再来看看M$专门为ORACLE写的类。
请大家打开MSDN2005,输入地址
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs /WD_ADONET/html/054f76b9-1737-43f0-8160-84a00a387217.htm(您也可以通过目录、索引或者搜索 来找到)
《Oracle .NET Framework 数据提供程序的系统要求》(即System.Data.OracleClient命名空间中的类),摘要如下:
Oracle .NET Framework 数据提供程序需要 Microsoft 数据访问组件 (MDAC) 2.6 版或更高版本。建议使用 MDAC 2.8 SP1。
还必须安装 Oracle 8i Release 3 (8.1.7) 客户端或更高版本。
Oracle 9i 版本之前的 Oracle 客户端软件无法访问 UTF16 数据库,因为 UTF16 是 Oracle 9i 中的一项新功能。要使用此功能,必须将客户端软件升级到 Oracle 9i 或更高版本。
哈哈,M$其实没有我们想象中的勤奋,他只是帮ORACLE CLIENT做了个包装而已。
4.Oracle Data Provider for .net(ODP.NET)
我们再到ORACLE的老家转转,可以发现他在很多地方都吹嘘ODP.NET,看看它有些什么要求才能用吧。
请大家在浏览器中输入地址(ORACLE的网站有点慢,请不要急)
http://www.oracle.com/technology/tech/windows/odpnet/faq.html#install
Q: What do I need to have installed on my client machine to have ODP.NET work?
A: You will require the following:
Windows 2000, Windows XP Professional, or Windows Server 2003
Microsoft .NET Framework 1.0 or higher
Oracle9i Client Release 2 (9.2) or higher
Oracle Net Services (included with the client)
Oracle Services for Microsoft Transaction Server, Release 2 (9.2) or higher. This is required for applications using distributed transacations.
简单翻译:
如果你用ODP.NET来访问ORACLE数据库,你需要以下条件:
操作系统:WIN2K XP 2003
.NET FRAMEWORK 1.0以上
ORACLE9I以上的客户端
5.第3方的观点:
在 http://www.fawcette.com/vsm/2003_07/magazine/columns/databasedesign/
有一篇文章叫 < <Take Advantage of Oracle in .NET> >
讲了如何在可视环境下(也就是用鼠标点、拖等操作)访问ORACLE 。
用的似乎就是OLE DB的方式。
好了,现在来做个总结。
同志们,回顾历史,展望未来,我们要发扬XXXX,高举YYYY(以下省略5000字)......
1.在不安装ORACLE客户端的情况下,可以用ODBC和OLEDB 2种方式来访问ORACLE;
2.如果喜欢多往别人的机器装东西,不怕麻烦,可以用“性能最好”(ORACLE网站这么说的)的ODP.NET来访问ORACLE;
3.如果用System.Data.OracleClient,可以稍微少装点东西,不过比2的帮助文档更多,并且我们似乎都习惯使用微软的东西。
4.推荐使用System.Data.OleDb中的类来访问ORACLE,优点:(1)因为我懒,我不喜欢往别人和我自己的机器里安装过多的东西; (2)可以运行在WIN98以上的系统下,而2 3中的方式只能在WIN2K以上的系统下;(3)ODBC似乎太老了点,看来我是中庸派的人......(哎,老了 -_- )
好了,感谢您坚持看完本文,希望没有浪费您的时间,对您有所帮助。