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 作的东西理论上也应该专门作过针对性的优化)。
当然还有另...全部
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=服务名
3 Oracle 中的数据类型:
Oracle 的数据类型和 SQL Server 相比,要“奇怪”一些:SQL Server 的大多数据类型很容易找到 。
NET 中比较接近的类型,Oracle 中的类型就离 。NET 类型远了许多,毕竟 Oracle 是和 Java 亲近的数据库。
number: 数字类型,一般是 Number(M,N),M是有效数字,N是小数点后的位数(默认0),这个是按十进制说的。
nvarchar2: 可变长字符型(Unicode),这个比较像 SQL Server 的 nvarchar(但不知 Oracle 为什么加了个“2”)。(去掉“n”为非 Unicode 的,下同。
)
nchar: 定长字符型(Unicode)。
nclob: “写作文”的字段,存储大量字符(Unicode)时用。
date: 日期类型,比较接近 SQL Server 的 datetime。
Oracle 中字段不能是 bit 或者 bool 之类的类型,一般是 number
(1) 代替的。
和 SQL Server 一样在 SQL 命令中,字符类型需要用单引号(')隔开,两个单引号('')是单引号的字符转义(比如: I'm fat。
写入一个 SQL 命令是: UPDATE 。。。 SET 。。。='I''m fat。' 。。。)。
比较特殊的是日期类型:比如要写入 2004-7-20 15:20:07 这个时刻需要如下写:
UPDATE 。
。。 SET 。。。 = TIMESTAMP '2004-7-20 15:20:07' 。。。
注意这里使用了 TIMESTAMP 关键字,并使用单引号隔开;另外请注意日期格式,上面的格式是可识别的,Oracle 识别的格式没有 SQL Server 那般多。
这是和 SQL Server 不同的地方。
顺便提一句:Access 中的日期类型是用井号(#)隔开的,UPDATE 。。。 SET 。。。 = #2004-7-20 15:20:07# 。。
。
4 访问 Oracle 过程/函数
(1)
SQL Server 作程序时经常使用存储过程,Oracle 里也可以使用过程,还可以使用函数。Oracle 的过程似乎是不能有返回值的,有返回值的就是函数了(这点有些像 BASIC,函数/过程区分的很细致。
SQL Server 存储过程是可以有返回值的)。
。NET 访问 Oracle 过程/函数的方法很类似于 SQL Server,例如:
OracleParameter[] parameters = {
new OracleParameter("ReturnValue", OracleType。
Int32, 0, ParameterDirection。ReturnValue, true, 0, 0, "",
DataRowVersion。Default, Convert。DBNull )
new OracleParameter("参数1", OracleType。
NVarChar, 10),
new OracleParameter("参数2", OracleType。DateTime),
new OracleParameter("参数3", OracleType。
Number, 1)
};。收起