C#连接Oracle数据库通过存储过程操作数据库

时间:2022-08-22 21:53:30

之前笔者一直用C#连接SQL Server数据库。近期由于工作需要,需要用C#连接Oracle数据库,并且要通过存储过程,来操作数据库中的数据,实现增、删、改、查(有分页功能)功能。并且,为了今后对数据库扩展方便,对现在的代码改动最小的情况下,实现数据库的平稳切换,必须采用OleDB的方式连接Oracle数据库、操作存储过程。

首先去网上搜索资料,确实找到了很多C#连接Oracle数据库,和用存储过程操作数据库的资料。但是仔细研究发现,清一色的全部是使用OracleClientOracle专用驱动)的方式对Oracle数据库及存储过程进行操作。没办法,只能自己动手、丰衣足食。经过3天左右的辛苦努力,终于实现了用OleDB连接Oracle数据库,并且用存储过程来操作Oracle数据库的方法。下面将实现方式总结一下。

OleDB操作Oracle存储过程,有几个难题;

1、  返回记录集,也就是Oracle的游标;

2、  对于某些特殊的应用,有可能需要返回多个记录集;

3、  将存储过程中的数据,通过输出参数的形式返回给程序(因为要做分页,需要将记录数输出来);

4、  Text大文本字段(对应Oracle的数据类型是CLOB)的增、改、查操作;

5、  对特殊字符的查询,如查询文本中是否包含“%”、“/”、“”、“_”等符号;

接下来,主要针对以上问题,进行介绍;

 

一、连接Oracle数据库

连接Oracle数据库,主要有2种方式。一种是使用微软的数据库驱动进行连接;另外一种是使用Oracle的数据库驱动进行连接;

经过在网上查资料,说是Oracle的数据库驱动,中文可能会出现乱码;微软的驱动虽然中文没有乱码,但是对于CLOB类型的字段,无法操作;经过对比,决定使用Oracle的数据库驱动。因为应用中,肯定要有CLOB类型的字段操作;但是经过测试,未发现中文出现乱码的情况;

Ø         Oracle数据库连接方式:

Provider=OraOLEDB.Oracle.1;User ID=username;password=dbpassword;Data Source=databasename;Persist Security Info=True;Extended Properties='PLSQLRSet=1';

 

Extended Properties='PLSQLRSet=1'

注意:上面这个属性一定要带上,否则无法操作有返回游标参数的存储过程;

 

Ø         微软的数据库连接方式:

Provider=MSDAORA.1;Data Source=allrun;User ID=allrunadmin;Password=allrun;Persist Security Info=True;

 

建议使用Oracle数据库的连接方式。

二、存储过程,返回多个记录集

Oracle存储过程脚本:

 

C#程序操作存储过程:

 

 

 

 

因为主要是介绍操作数据库存储过程的方法,如何连接数据库请自己写;

 

一、CLOB字段的增、改、查;

假设表名为:DESKTOP_PAGE,包含2个字段:USERCODE(普通字符串)、CONTENTCLOB类型)

Oracle存储过程脚本为:

 

 

四、对特殊字符的查询,如查询文本中是否包含“%”、“/”、“”、“_”等符号;

Oracle脚本:

以上是笔者操作Oracle数据库总结出来的一些经验,然后对大家有所帮助。s