存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码。

调用oracle存储过程方法一:

ORACLE代码

CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as

BEGIN

a:='test';

OPEN MYCS1 FOR

SELECT 1 from dual;

OPEN MYCS2 FOR

SELECT 2 from dual;

END;

C#代码

///

/// 执行oracle存储过程返回多个结果集

///

/// 存储过程名称

/// 返回个数

/// 参数

/// 任意对象数组

public object[] ExcuteProc_N_Result(string strProcName, int ResultCount, params OracleParameter[] paras)

{

using (OracleConnection conn = new OracleConnection("User ID=用户名;Password=密码;Data Source=数据库;"))

{

OracleCommand cmd = new OracleCommand(strProcName, conn);

if (paras != null && paras.Length > 0)

{

for (int j = 0; j < paras.Length; j++)

{

if (paras[j].Value == null)

{

paras[j].Value = DBNull.Value;

}

}

}

cmd.Parameters.AddRange(paras);

cmd.CommandType = CommandType.StoredProcedure;

conn.Open();

cmd.ExecuteNonQuery();

int i = 0;

//int nOutputParametersCount = 0;

object[] objResult = new object[ResultCount];

foreach (OracleParameter p in cmd.Parameters)

{

if (p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput)

{

if (p.Value is OracleDataReader)

{

OracleDataReader reader = p.Value as OracleDataReader;

objResult[i++] = ConvertDataReaderToDataTable(reader);

}

else

{

objResult[i++] = p.Value;

}

}

}

return objResult;

}

}

///

/// 将DataReader 转为 DataTable

///

/// OleDbDataReader

protected DataTable ConvertDataReaderToDataTable(OracleDataReader reader)

{

DataTable objDataTable = new DataTable("TmpDataTable");

try

{

int intFieldCount = reader.FieldCount;//获取当前行中的列数;

for (int intCounter = 0; intCounter <= intFieldCount - 1; intCounter++)

{

objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));

}

//populate datatable

objDataTable.BeginLoadData();

//object[] objValues = new object[intFieldCount -1];

object[] objValues = new object[intFieldCount];

while (reader.Read())

{

reader.GetValues(objValues);

objDataTable.LoadDataRow(objValues, true);

}

reader.Close();

objDataTable.EndLoadData();

return objDataTable;

}

catch (Exception ex)

{

throw new Exception("转换出错出错!", ex);

}

}

调用方法

OracleParameter[] oracleParameter = new OracleParameter[]{

new OracleParameter("MYCS1",OracleType.Cursor),

new OracleParameter("MYCS2",OracleType.Cursor),

new OracleParameter("a",OracleType.VarChar,200),

};

oracleParameter[0].Direction = ParameterDirection.Output;

oracleParameter[1].Direction = ParameterDirection.Output;

oracleParameter[2].Direction = ParameterDirection.Output;

object[] xxx = ExcuteProc_N_Result("gd_CURSOR", 3, oracleParameter);

调用oracle存储过程方法二:

存储过程结构如下:

Create or Replace Procedure xx_yy

(

i_OrderID in number,

i_ReturnValue out number

)

is

v_RealValue number;

v_TotalValue number;

v_AdvendorID number;

begin

自己写就行

end;

下面讲一下调用:

表结构

create table ORDERTABLE

(

ORDERID NUMBER not null,

TEXT NUMBER not null

)

存储过程

(

i_OrderID in number,

i_ReturnValue out number

)

is

spass ordertable.text%type;

begin

select text into spass from ordertable where orderid=i_OrderID;

i_ReturnValue:=spass;

exception

when no_data_found

then i_ReturnValue:=-1;

end;

源码:

using System.Data .OracleClient ;//(别忘了添加)

OracleConnection Oraclecon = new OracleConnection ("Password=dloco;User ID=dloco;Data Source=dloco;");

OracleCommand myCMD = new OracleCommand();

OracleParameter[] parameters = { new OracleParameter("i_OrderID", OracleType.Number, 10),new OracleParameter("i_ReturnValue",OracleType.Number,10 )};

parameters[0].Value = 1;

parameters[1].Direction = ParameterDirection.Output;

myCMD.Connection = Oraclecon;

myCMD.CommandType = CommandType.StoredProcedure;

myCMD.CommandText = "dloco.xx_yy";

myCMD.Parameters .Add (parameters[0]);

myCMD.Parameters .Add (parameters[1]);

myCMD.Connection.Open();

myCMD.ExecuteNonQuery();

string result=myCMD.Parameters["i_ReturnValue"].Value.ToString();

MessageBox.Show (result);

Oraclecon.Close();

以上就是asp.net中调用oracle存储过程的全部内容,希望对大家有所帮助。

cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法相关推荐

  1. ASP.NET中文件上传下载方法集合

    asp.net 2008-08-23 21:10:35 阅读0 评论0   字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...

  2. 在ASP.NET中调用存储过程方法新解

    摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程 在使用.N ...

  3. 在ASP.NET中调用存储过程方法

    两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的"官方"方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后 ...

  4. asp.net中调用存储过程大全

    在 Visual Basic .NET 中使用存储过程 ADO.NET 简介 本文假设您已经了解了 ADO.NET 的基础知识.如果您在工作中从未使用过 ADO.NET 中的 DataAdapter. ...

  5. ASP程序中调用函数Now()显示上午下午的问题

    ASP程序中,调用函数Now(),显示的时间总是形如"2009-07-12 上午 08:12:56 "这样的,总显示"上午"和"下午",解决 ...

  6. java调用存储过程 sql server_Java中调用SQL Server存储过程示例

    Java中调用SQL Server存储过程示例2007-09-03 08:48来源:论坛整理作者:孟子E章责任编辑:方舟·yesky评论(3) 最近做了个Java的小项目(第一次写Java的项目哦), ...

  7. mysql在触发器中调用存储过程_mysql 触发器中调用存储过程

    想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...

  8. asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法

    可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...

  9. linux shell 执行存储过程,在shell中调用执行存储过程

    基本的shell文件结构如下: sqlplus user/password < exec proc_name; exit ! Demo procedure name: sp_ems_hasten ...

最新文章

  1. 创业公司备战“11.11”创新行为大赏
  2. 关于Eclispse连接Mysql的Jdbc
  3. CSS3 常用属性
  4. redis.conf 配置档详解
  5. 江苏全国计算机考试考点,江苏省 全国计算机等级考试考点
  6. maven 文件上传下载_使用Maven将文件上传和下载到S3
  7. RS(2)--从文本数据到用户画像
  8. codevs3872 邮递员送信(SPFA)
  9. 事件处理程序中event参数的传递
  10. 诺基亚正式收购阿朗:物联网时代再出发
  11. 接口测试(apipost、jmeter和python脚本)
  12. 剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
  13. PyTorch-07 卷积神经网络(什么是卷积、卷积神经网络、池化层、Batch normalization、经典卷积网络、深度残差网络 ResNet、nn.Module、数据增强)
  14. 省市级联实现,并根据IP自动获取省市
  15. 我的折腾日记-- Ubuntu 16.04
  16. python中pd series_Python 数据处理(三)——pd.Series
  17. 程序读写时间内存 硬盘 cache 访问速度数级对比
  18. python绘制红色五角星_python绘制五角星
  19. 谈谈如何建立价值驱动的数据战略
  20. 2022 QS世界大学排名发布!MIT霸榜,清北冲上全球前20

热门文章

  1. 如何分饼决定饼做多大
  2. PrepareStatement的用法
  3. 物联网精英训练营工作日志
  4. 泰凌微8258入门教程 进阶篇④——恢复出厂配置
  5. 微信二维码竟然可以变色了?
  6. 树莓派安装raspbian系统
  7. 四种引用类型在Springboot中的使用
  8. Spring-Bean的作用域-Singleton
  9. asp.net使用echarts展示图表数据
  10. VLC Buffering机制介绍