大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> ORACLE -> .NET访问Oracle数据库相关

.NET访问Oracle数据库相关

时间: 2021-08-13 作者:daque

长久此后,我从来用的是 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=效劳名 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 保存进程是不妨有归来值的)。[page_break].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)  }; parameters[1].value = "test"; parameters[2].value = datetime.now; parameters[3].value = 1;                        // 也不妨是 new oraclenumber(1); oracleconnection connection = new oracleconnection( connectionstring ); oraclecommand command = new oraclecommand("因变量/程名", connection); command.commandtype = commandtype.storedprocedure; foreach(oracleparameter parameter in parameters)      command.parameters.add( parameter ); connection.open(); command.executenonquery(); int returnvalue = parameters[0].value; //接受因变量归来值 connection.close(); parameter 的 dbtype 设定请拜见 system.data.oracleclient.oracletype 列举的文书档案,比方:oracle 数据库中 number 典型的参数的值不妨用 .net decimal 或 system.data.oracleclient.oraclenumber 典型指定; integer 典型的参数的值不妨用 .net int 或 oraclenumber 典型指定。之类。 上头例子中仍旧看到因变量归来值是用名为“returnvalue”的参数指定的,该参数为 parameterdirection.returnvalue 的参数。 5。考察 oracle 进程/因变量 (2) 不归来记载集(没有 select 输入)的进程/因变量,挪用起来和 sql server 较为一致。但即使想经过进程/因变量归来记载集,在 oracle 中就比拟烦恼少许了。 在 sql server 中,如次的保存进程: create procedure getcategorybooks (     @categoryid int ) as select * from books where categoryid = @categoryid go 在 oracle 中,请按以次办法操纵: (1)创造一个包,含有一个游标典型:(一个数据库中只需作一次) create or replace package test   as        type test_cursor is ref cursor; end test; (2)进程: create or replace procedure getcategorybooks (      p_cursor out test.test_cursor,    -- 这边是上头包中的典型,输入参数      p_catogoryid integer ) as begin      open p_cursor for            select * from books            where categoryid=p_catogoryid; end getcategorybooks; (3).net 步调中: oracleparameters parameters = {      new oracleparameter("p_cursor", oracletype.cursor, 2000, parameterdirection.output, true, 0, 0, "",           datarowversion.default, convert.dbnull),      new oracleparameter("p_catogoryid", oracletype.int32) }; parameters[1].value = 22; oracleconnection connection = new oracleconnection( connectionstring ); oraclecommand command = new oraclecommand("getcategorybooks", connection); command.commandtype = commandtype.storedprocedure; foreach(oracleparameter parameter in parameters)      command.parameters.add( parameter ); connection.open(); oracledatareader dr = command.executereader(); while(dr.read()) {     // 你的简直操纵。这个就不须要我教吧? } connection.close(); 其余有一点须要指出的是,即使运用 datareader 博得了一个记载集,那么在 datareader 封闭之前,步调没辙考察输入参数和归来值的数据。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.