我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其用到参数输出的时候,但是ORACLE的功能强大不会这个不能处理,这个你懂得,呵呵。

2个解决方案,一个是ORACLE中的函数可以带参数输出的,这个比较吻合SQLSERVER中的存储过程(个人比较意见用 ORACLE中的函数应对SQLSERVER中的存储过程。

二就是用PROCEDURE 的OUT参数带出结果来解决这个问题。

首先是SQL语句如下创建 PROCEDURE

create or replace procedure sp_ACC_CREATEPERMISSION(CategoryID  in NUMBER,
Description in VARCHAR2,
OutValue out number) is
n number;
begin
INSERT INTO Accounts_Permissions
(PERMISSIONID, CategoryID, Description)
VALUES
(Seq_Accounts_Permissions.Nextval, CategoryID, Description);
COMMIT;
SELECT Seq_Accounts_Permissions.currval into n FROM DUAL;
OutValue:=n;
end;

测试PROCEDUCE输出

protected void button2_Click(object sender, EventArgs e)
{
OracleConnection conn = new OracleConnection("Data Source=yu;Persist Security Info=True;User ID=xxxxxxx;Password=xxxxxxx;Unicode=True;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "sp_Acc_CreatePermission";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters, including the return parameter to retrieve
// the return value
cmd.Parameters.Add("CategoryID", OracleType.Number).Value = 555;
cmd.Parameters.Add("Description", OracleType.VarChar, 50).Value = "aaa1";
cmd.Parameters.Add("OutValue", OracleType.Number).Direction = ParameterDirection.Output;
// execute the function
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
// output the result
Response.Write("OutValue: " + cmd.Parameters["OutValue"].Value);
}

测试PROCEDURE三层

 protected void Button4_Click(object sender, EventArgs e)
{
Accounts.Data.Permission myperm = new Accounts.Data.Permission();
int i = myperm.Create1(555, "aaa3");
Response.Write(i.ToString());
}

调用的方法CREATE1
public int Create1(int categoryID, string description)
{
int rowsAffected;
OracleParameter[] parameters =
{
new OracleParameter("CategoryID", OracleType.Number),
new OracleParameter("Description", OracleType.VarChar,50)
};
parameters[0].Value = categoryID;
parameters[1].Value = description;
return DbHelperOra.RunProcedure2("sp_Acc_CreatePermission", 
parameters, out rowsAffected);
}

调用执行存储过程

        public static int RunProcedure2(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand2(connection, storedProcName, parameters);
rowsAffected = command.ExecuteNonQuery();
result = int.Parse(command.Parameters["OutValue"].Value.ToString());
//Connection.Close();
return result;
}
}

专门针对ORACLE 的 PROCEDURE 来执行的ORACLE COMMAND

        private static OracleCommand BuildIntCommand2(OracleConnection connection, string storedProcName, IDataParameter[] parameters)

{

OracleCommand command = BuildQueryCommand(connection, storedProcName, parameters);                 
command.Parameters.Add(" OutValue", OracleType.Number).Direction = ParameterDirection.Output; return command; }

.NET中使用ORACLE函数和过程并输出参数(2)相关推荐

  1. .NET中使用ORACLE函数和过程并输出参数(1)

    Technorati 标签: .net, ADO.NET, oracle, DBHELPERORA 我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其 ...

  2. 在MATLAB中采用M文件实现对Simulink中的S函数程序实现自动调参数

    在做研究的时候我们经常需要对模型的参数就行相应的选择,然而有没有觉得每次更改一个参数都需要运行一次仿真程序觉得很无聊呀,运行完程序还要看效果怎么样,然后再根据效果来调整参数,再次运行程序,如此反复. ...

  3. php oracle 源码_PHP3中使用ORACLE函数的使用说明

    OCIDefineByName 让 SELECT 指令可使用 PHP 变数. 语法: boolean OCIDefineByName(int stmt, string ColumnName, mixe ...

  4. Python中动态编译函数compile(source, filename, mode, ......)参数filename的作用是什么?...

    动态编译函数compile调用语法如下: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) 其中的fi ...

  5. oracle substr(table),oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned]) 其中,cExpression指定要从其中返回字符串的字符表达式或备注字段: nSta ...

  6. mybatis可以用oracle,使用MyBatis调用oracle函数(基于注释)

    我需要使用注解在MyBatis中调用Oracle函数.使用MyBatis调用oracle函数(基于注释) 我的映射: @Select("{ CALL #{outParam, jdbcType ...

  7. mysql ifnull 无效_关于MySql中使用IFNULL()函数失效的问题。

    今天在学习时,碰到一个问题:在联表查询取得结果后,如果取得的结果是空值,则给一个默认值,如果不是空值,则返回这个值. 下面我们来看看业务场景: 在menu表中: 存储的是前端页面的菜单配置,注意成员权 ...

  8. vb中的clng函数

    vb中的clng函数可以将字符串输出成长整型数据. clng函数语法亿万千金嫁上班族:CLng(expression) 参数:expression   必选项,expression 参数是随意率性有效 ...

  9. C语言sum函数不接受一个参数,函数不接受2个参数怎么解决

    c++函数不接受两个参数是为什么 class Time { int hour,minute,second; public: Time(int a=0,int b=0,i需要在使用之前声明一下函数,你在 ...

最新文章

  1. c语言inline详解
  2. 食品新消费的2021:站在逻辑跑通与成为品牌的隧道期
  3. hp designiet 500_2020年HP学院壁纸
  4. 前端---JavaScript基础1
  5. 汽车维修行业呼吁大学生加入修车行列
  6. xxxx must either be declared abstract or implement abstract method ‘map(T)‘ in ‘MapFunction‘
  7. 机器人图形变变变_幼儿园中班公开课数学教案《图形变变变》含反思
  8. c++--类的作用域
  9. 容器中Bean的生命周期
  10. sql的内连接、左连接、右连接
  11. [互联网]互联网公司的种类
  12. 谁在制造房价泡沫:土地供应下滑 居民杠杆上升
  13. Spring的核心技术(四)---依赖性简介
  14. 练习:输入一个数,判断他是奇数还是偶数
  15. Java环境变量的配置与介绍
  16. C语言实现 扫雷游戏 | 简单项目
  17. 那些年啊 那些事 一个程序员的奋斗史 127
  18. 微信小程序之天气查询小案例
  19. ajax 如何实现分页功能
  20. js怎么实现倒计时效果

热门文章

  1. 062《小岛经济学》读书笔记
  2. 删除隧道适配器 本地连接
  3. 全志V3S嵌入式驱动开发(开发软件搭建)
  4. [参考C3程序员] - C语言贪吃蛇(二维数组)
  5. 转发PV操作的理解 ,简单易懂
  6. c++中static_cast用法
  7. 理解电压,电流和电阻(U=IR)
  8. 延续辉煌:苹果CEO蒂姆·库克,《蒂姆·库克传》书评
  9. spark学习-BlockManager原理
  10. WSO2 API Manager调研学习总结