cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法
存储过程(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存储过程的方法相关推荐
- ASP.NET中文件上传下载方法集合
asp.net 2008-08-23 21:10:35 阅读0 评论0 字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...
- 在ASP.NET中调用存储过程方法新解
摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程 在使用.N ...
- 在ASP.NET中调用存储过程方法
两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的"官方"方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后 ...
- asp.net中调用存储过程大全
在 Visual Basic .NET 中使用存储过程 ADO.NET 简介 本文假设您已经了解了 ADO.NET 的基础知识.如果您在工作中从未使用过 ADO.NET 中的 DataAdapter. ...
- ASP程序中调用函数Now()显示上午下午的问题
ASP程序中,调用函数Now(),显示的时间总是形如"2009-07-12 上午 08:12:56 "这样的,总显示"上午"和"下午",解决 ...
- java调用存储过程 sql server_Java中调用SQL Server存储过程示例
Java中调用SQL Server存储过程示例2007-09-03 08:48来源:论坛整理作者:孟子E章责任编辑:方舟·yesky评论(3) 最近做了个Java的小项目(第一次写Java的项目哦), ...
- mysql在触发器中调用存储过程_mysql 触发器中调用存储过程
想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...
- asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法
可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...
- linux shell 执行存储过程,在shell中调用执行存储过程
基本的shell文件结构如下: sqlplus user/password < exec proc_name; exit ! Demo procedure name: sp_ems_hasten ...
最新文章
- 创业公司备战“11.11”创新行为大赏
- 关于Eclispse连接Mysql的Jdbc
- CSS3 常用属性
- redis.conf 配置档详解
- 江苏全国计算机考试考点,江苏省 全国计算机等级考试考点
- maven 文件上传下载_使用Maven将文件上传和下载到S3
- RS(2)--从文本数据到用户画像
- codevs3872 邮递员送信(SPFA)
- 事件处理程序中event参数的传递
- 诺基亚正式收购阿朗:物联网时代再出发
- 接口测试(apipost、jmeter和python脚本)
- 剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
- PyTorch-07 卷积神经网络(什么是卷积、卷积神经网络、池化层、Batch normalization、经典卷积网络、深度残差网络 ResNet、nn.Module、数据增强)
- 省市级联实现,并根据IP自动获取省市
- 我的折腾日记-- Ubuntu 16.04
- python中pd series_Python 数据处理(三)——pd.Series
- 程序读写时间内存 硬盘 cache 访问速度数级对比
- python绘制红色五角星_python绘制五角星
- 谈谈如何建立价值驱动的数据战略
- 2022 QS世界大学排名发布!MIT霸榜,清北冲上全球前20