Technorati 标签: .net, ADO.NET, oracle, DBHELPERORA

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

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

程。

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

下面来做个程序测试

qiantian
form1
" runat="server">
Button1" runat="server" OnClick="Button1_Click" Text="测试FUNCTION输出" /> button2" runat="server" OnClick="button2_Click" Text="测试PROCEDUCE输出" />
Button3" runat="server" Text="测试FUNCTION三层" OnClick="Button3_Click" /> Button4" runat="server" Text="测试PROCEDURE三层" OnClick="Button4_Click" />

后台代码 针对测试FUNCTION输出(直接写在代码里面)
       protected void Button1_Click(object sender, EventArgs e)
{
OracleConnection conn = new OracleConnection("Data Source=yu;Persist Security Info=True;User ID=$$$$$$;Password=$$$$$$$$;Unicode=True;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "F_ACC_CREATEPERMISSION";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters, including the return parameter to retrieve
cmd.Parameters.Add("CategoryID", OracleType.Number).Value = 555;
cmd.Parameters.Add("Description", OracleType.VarChar, 50).Value = "zzz1";
// the return value
cmd.Parameters.Add("Result", OracleType.Number).Direction = ParameterDirection.ReturnValue;
// execute the function
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
// output the result
Response.Write("Resultis: " + cmd.Parameters["Result"].Value);
}

后台代码 针对测试FUNCATION (通过参数 数据库类的 三层模式输出)

       protected void Button3_Click(object sender, EventArgs e)
{
//   Accounts.Bus.Permissions myperm = new Accounts.Bus.Permissions();
Accounts.Data.Permission myperm = new Accounts.Data.Permission();
int i = myperm.Create(555, "zzz3");
Response.Write(i.ToString());
}

 
 

PERMISSION 类中代码

        ///
/// 创建一个权限
///
public int Create(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.RunProcedure("F_ACC_CREATEPERMISSION", parameters, out rowsAffected);
}

DbHelperOra中的代码

   ///
/// 执行存储过程,返回影响的行数   对应ORACLE 的FUNCTION 的RETURN用的
///
/// 存储过程名
/// 存储过程参数
/// 影响的行数
///
public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection, storedProcName, parameters);
rowsAffected = command.ExecuteNonQuery();
result = int.Parse(command.Parameters["ReturnValue"].Value.ToString());
//Connection.Close();
return result;
}
}

BuildIntCommand调用的代码段

        ///
/// 创建OracleCommand 对象实例(用来返回一个整数值)
///
/// 存储过程名
/// 存储过程参数
/// OracleCommand 对象实例
private static OracleCommand BuildIntCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)
{
OracleCommand command = BuildQueryCommand(connection, storedProcName, parameters);
//command.Parameters.Add(new OracleParameter("ReturnValue", OracleType.Int32, 4, ParameterDirection.ReturnValue,false, 0, 0, string.Empty, DataRowVersion.Default, null));
command.Parameters.Add("ReturnValue", OracleType.Number).Direction = ParameterDirection.ReturnValue;
return command;
}
BuildQueryCommand调用的代码段
        ///
/// 构建OracleCommand 对象(用来返回一个结果集,而不是一个整数值)
///
/// 数据库连接
/// 存储过程名
/// 存储过程参数
/// OracleCommand
private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)
{
OracleCommand command = new OracleCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (OracleParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
return command;
}

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

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

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

  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#三种判断字符是否为汉字的方法
  2. java jtable应用源码_JTable的应用(一)
  3. Java和Android中的注解
  4. 在Python2.7下如何安装TA-lib库
  5. onnx 测试_用于ONNX的TensorRT后端
  6. LOJ2181 排序
  7. 混合app--Hybrid App定位
  8. html表白程序源码_表白程序源码html_程序员表白代码html (1)
  9. 如何使用代理ip软件的代理ip来维护你的隐私安全?
  10. 地铁三号线 - 搬家故事
  11. linux堆内存管理
  12. 中国人工智能未来发展前景(AI+时代真正来临)
  13. 保险知识(一):五大险种入门
  14. 坐标下降法(Coordinate descent)
  15. 雷尼绍PH10自动定位测座
  16. 智工运维定位器技术方案及选型
  17. 家装全套装修资料(八)
  18. element 附件上传/文件上传组件
  19. matlab输入字符串函数,MATLAB字符串函数
  20. IntelliJ IDEA :快捷键整理

热门文章

  1. 原生JS实现多级联动
  2. Java面试题收集(三)
  3. 2020中国AI单笔最大融资:第四范式完成7亿美元D轮融资
  4. 062《小岛经济学》读书笔记
  5. 小学计算机绘画简报,广州市小学电脑绘画、小报制作比赛简报.doc
  6. 黄金跳水如黄鼠狼探亲不怀好意,晚间黄金走势预测分析。
  7. 嵌入式Linux驱动开发1---环境搭建
  8. oracle 大会旧金山,甲骨文全球大会2013旧金山- In-Memory Option即将发布
  9. Android ASDL进程通信
  10. 谷歌云新任CEO怼AWS开源问题,微软Azure火上浇油