知识大全 .NET访问Oracle数据库相关
Posted 类型
篇首语:三更灯火五更鸡,正是男儿读书时。黑发不知勤学早,白首方悔读书迟。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET访问Oracle数据库相关相关的知识,希望对你有一定的参考价值。
.NET访问Oracle数据库相关 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
长期以来 我一直用的是 MS SQL Server / Access 数据库 通过 NET 访问 MS 自家的东西几乎没碰到过什么麻烦 最近项目中要用 Oracle 作为数据库 学习研究了一些 NET 访问 Oracle 的东西 发现问题倒真的不少 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 (数据提供程序) 数据库连接 无论是 System Data OleDb 还是 System Data OracleClient 访问 Oracle 都需要在 NET 运行的机器(ASP NET 中就是 Web 服务器)安装 Oracle 客户端组件 (这一点是和 MS 的两种数据库不同的 MS 的东西安装 MDAC: Microsoft Data Access Component 以上版本后 就无须再安装 SQL Server 客户端或者 Office 软件 就能访问 ) System Requirements ( )如用 System Data OracleClient 访问 Oracle 客户端组件版本应在 Oracle i Client Release ( )以上版本 MS 只确保访问 Oracle Oracle Oracle i 服务器时的情况 MDAC 以上 ( )如用 System Data OleDb 访问 Oracle 客户端组件版本 以上或 以上 MDAC 以上 如服务器为 Oracle i 以上 客户端组件版本应为 c 在 NET 运行的机器中 安装 Oracle 客户端 然后打开 Net Manager (Oracle i) / Easy Config (Oracle i) 按你以前的经验设置本地服务的映射(这里的服务名将用于数据库连接串) System Data OracleClient 中访问 Oracle 数据库的连接串是 User ID=用户名; Password=密码; Data Source=服务名 (上述为一般的连接串 详细的连接串项目可以在 System Data OracleClient OracleConnection ConnectionString 属性的文档中找到 ) System Data OleDb 中的访问 Oracle 数据库的连接串是 Provider=MSDAORA ; User ID=用户名; Password=密码; Data Source=服务名 Oracle 中的数据类型 Oracle 的数据类型和 SQL Server 相比 要 奇怪 一些 SQL Server 的大多数据类型很容易找到 NET 中比较接近的类型 Oracle 中的类型就离 NET 类型远了许多 毕竟 Oracle 是和 Java 亲近的数据库 number: 数字类型 一般是 Number(M N) M是有效数字 N是小数点后的位数(默认 ) 这个是按十进制说的 nvarchar : 可变长字符型(Unicode) 这个比较像 SQL Server 的 nvarchar(但不知 Oracle 为什么加了个 ) (去掉 n 为非 Unicode 的 下同 ) nchar: 定长字符型(Unicode) nclob: 写作文 的字段 存储大量字符(Unicode)时用 date: 日期类型 比较接近 SQL Server 的 datetime Oracle 中字段不能是 bit 或者 bool 之类的类型 一般是 number( ) 代替的 和 SQL Server 一样在 SQL 命令中 字符类型需要用单引号( )隔开 两个单引号( )是单引号的字符转义(比如 I m fat 写入一个 SQL 命令是 UPDATE SET = I m fat ) 比较特殊的是日期类型 比如要写入 : : 这个时刻需要如下写 UPDATE SET = TIMESTAMP : : 注意这里使用了 TIMESTAMP 关键字 并使用单引号隔开 另外请注意日期格式 上面的格式是可识别的 Oracle 识别的格式没有 SQL Server 那般多 这是和 SQL Server 不同的地方 顺便提一句 Access 中的日期类型是用井号(#)隔开的 UPDATE SET = # : : # 访问 Oracle 过程/函数( ) SQL Server 作程序时经常使用存储过程 Oracle 里也可以使用过程 还可以使用函数 Oracle 的过程似乎是不能有返回值的 有返回值的就是函数了(这点有些像 BASIC 函数/过程区分的很细致 SQL Server 存储过程是可以有返回值的)
NET 访问 Oracle 过程/函数的方法很类似于 SQL Server 例如 OracleParameter[] parameters = new OracleParameter( ReturnValue OracleType Int ParameterDirection ReturnValue true DataRowVersion Default Convert DBNull ) new OracleParameter( 参数 OracleType NVarChar ) new OracleParameter( 参数 OracleType DateTime) new OracleParameter( 参数 OracleType Number ) ; parameters[ ] Value = test ; parameters[ ] Value = DateTime Now; parameters[ ] Value = ; // 也可以是 new OracleNumber( ); OracleConnection connection = new OracleConnection( ConnectionString ); OracleCommand mand = new OracleCommand( 函数/程名 connection); mand CommandType = CommandType StoredProcedure; foreach(OracleParameter parameter in parameters) mand Parameters Add( parameter ); connection Open(); mand ExecuteNonQuery(); int returnValue = parameters[ ] Value; //接收函数返回值 connection Close(); Parameter 的 DbType 设定请参见 System Data OracleClient OracleType 枚举的文档 比如 Oracle 数据库中 Number 类型的参数的值可以用 NET decimal 或 System Data OracleClient OracleNumber 类型指定 Integer 类型的参数的值可以用 NET int 或 OracleNumber 类型指定 等等 上面例子中已经看到函数返回值是用名为 ReturnValue 的参数指定的 该参数为 ParameterDirection ReturnValue 的参数 访问 Oracle 过程/函数 ( ) 不返回记录集(没有 SELECT 输出)的过程/函数 调用起来和 SQL Server 较为类似 但如果想通过过程/函数返回记录集 在 Oracle 中就比较麻烦一些了 在 SQL Server 中 如下的存储过程 CREATE PROCEDURE GetCategoryBooks ( @CategoryID int ) AS SELECT * FROM Books WHERE CategoryID = @CategoryID GO 在 Oracle 中 请按以下步骤操作 ( )创建一个包 含有一个游标类型 (一个数据库中只需作一次) CREATE OR REPLACE PACKAGE Test AS TYPE Test_CURSOR IS REF CURSOR; END Test; ( )过程 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; ( ) NET 程序中 OracleParameters parameters = new OracleParameter( p_CURSOR OracleType CURSOR ParameterDirection Output true DataRowVersion Default Convert DBNull) new OracleParameter( p_CatogoryID OracleType Int ) ; parameters[ ] Value = ; OracleConnection connection = new OracleConnection( ConnectionString ); OracleCommand mand = new OracleCommand( GetCategoryBooks connection); mand CommandType = CommandType StoredProcedure; foreach(OracleParameter parameter in parameters) mand Parameters Add( parameter ); connection Open(); OracleDataReader dr = mand ExecuteReader(); while(dr Read()) // 你的具体操作 这个就不需要我教吧? connection Close(); 另外有一点需要指出的是 如果使用 DataReader 取得了一个记录集 那么在 DataReader 关闭之前 程序无法访问输出参数和返回值的数据 cha138/Article/program/Oracle/201311/17063相关参考
知识大全 用.NET新提供的managed provider来访问Oracle数据
用.NET新提供的managedprovider来访问Oracle数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶
知识大全 ADO.NET访问Oracle 9i存储过程(下)
ADO.NET访问Oracle9i存储过程(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ADO.NET访问Oracle 9i存储过程(上)
ADO.NET访问Oracle9i存储过程(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ADO.NET访问Oracle 9i存储过程(上)[1]
ADO.NET访问Oracle9i存储过程(上)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[4]
ADO.NET访问Oracle9i存储过程(上)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[8]
ADO.NET访问Oracle9i存储过程(上)[8] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[5]
ADO.NET访问Oracle9i存储过程(上)[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[6]
ADO.NET访问Oracle9i存储过程(上)[6] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[7]
ADO.NET访问Oracle9i存储过程(上)[7] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 ADO.NET访问Oracle 9i存储过程(上)[2]
ADO.NET访问Oracle9i存储过程(上)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧