1、OracleClient方式,是微软专门针对Oracle数据库开发的,仅在 .NET Framework 1.1 版中受支持。据说速度快、性能好,是推荐使用的方式。但根据我的经验,当Oracle数据库服务器端采用英文字符集比如 US7ASCII 时,客户端不管字符集如何设置,读出的中文都是乱码;若服务器端用中文字符集比如 ZHS16GBK ,则无乱码问题。
引用类库:System.Data.OracleClient.dll。
命名空间:System.Data.OracleClient。
常用类:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等。
典型连接字符串:“data source=oratest;user id=scott;password=tiger”(注意:可不指定 provider 驱动)。
2、 OleDb方式,微软和Oracle公司各自提供了OleDb的驱动程序,使用方法的差别很少。不管Oracle服务器端用何字符集,读写中文均无乱码问题。
命名空间:System.Data.OleDb。
常用类:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
连接字符串:与OracleClient方式相比,要添加一个provider,微软为“provider=MSDAORA.1;”或“provider=MSDAORA”,Oracle为“provider='OraOleDb.Oracle';”。
3、 oracle 提供的Oracle Data Provider for .NET(ODP.net)
引用类库:Oracle.DataAccesss.dll 【安装oracle for .net的安装包Oracle Data Provider for .NET】
命名空间:Oracle.DataAccess.Client和Oracle.DataAccess.Types【Oracle.DataAccess.Client用于设置数据库的连接等等通用功能,Oracle.DataAccess.Types用于设置
oracle自定义的一些数据类型】
常用类:OracleConnection、OracleCommand、OracleDataReader 等
连接字符串:和OleDb方式格式相同,只是provider换为 “Provider=OraOLEDB.Oracle.1”
4、dotConnect For Oracle是Devart公司出品的一个.net平台访问Oracle数据库的一个驱动。它的专业版本是一个收费版本提供了许多别的驱动所没有的功能与特性,如对Linq To Oracle,Ado.Net Entity Framework For Oracle支持等。我们一般不会去买它来作开发,在实际项目中使用它的破解版本也不太合适。这里我们使用的是它的Express免费版本,这个版本提供的功能和微软和Oracle提供的版本基本一致。这个版本可以从下面的链接下载。
http://www.devart.com/dotconnect/oracle/dcoraclefree.exe
我考虑使用这个免费版本的理由如下:
1. 微软将在最新版本的.Net Framework中(4.0中吧),不再提供它们的Oracle驱动。这使用我对其它厂商提供的Oracle驱动产生了好感。
2. 使用微软提供的驱动有个几乎是无法解决的问题,就是OCI-22053 溢出错误 overflow error。Oracle 数值数据类型最多可存储 38 个字节的精度。当将 Oracle 数值转换为公共语言运行库数据类型时,Oracle 值可能会变得过大。这会导致 Oracle OCI-22053 溢出错误。特别是我们获取用avg等SQL函数算出来的数值时,经常会碰到这个问题。解决的办法是把数值精度在SQL语句中截短或把数值转换成字符串。但这总有点不爽吧。而 Devart dotConnect For Oracle则没有这个问题。
3. dotConnect For Oracle对Oracle数据库的各种编码都支持的很好。
4. dotConnect For Oracle可以在没有安装Oracle Client的机器上访问Oracle数据库服务。
5.性能上的考虑。按照Devart提供的数据,dotConnect For Oracle在性能上比微软和Oracle提供的驱动都要好。具体可以参考http://www.devart.com/dotconnect/oracle/performance.html 。