在C#中键入安全绑定到Oracle存储过程?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#中键入安全绑定到Oracle存储过程?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2133字,纯文字阅读大概需要4分钟。
内容图文
![在C#中键入安全绑定到Oracle存储过程?](/upload/InfoBanner/zyjiaocheng/904/93434308cc4a4d4599e6811afd1f6f95.jpg)
我们正在使用Oracle数据库在C#中部署多个项目.我想在Oracle存储过程中实现所有数据库逻辑
>将所有数据库逻辑保留在数据库中
>使数据库结构更改时更容易维护
>允许跨编程语言更轻松地重用存储过程
我运行测试代码,在那里使用SYS_REFCURSOR返回行,并且我在结果上手动执行数据绑定,因为SYS_REFCURSOR可以返回任何内容 – 即它不是类型安全的
我的问题是 – 有什么办法可以在存储过程返回类型中定义正确的类型,并在我的C#代码中安全地正确绑定到该类型?
例如我的PL / SQL过程看起来像这样 – 返回部分不是类型安全的 – 它可以是任何东西.如果我想从另一个Oracle包重新使用它,那么它将没有正确的类型检查
PROCEDURE get_risk (p_process_id IN NUMBER, p_risk OUT sys_refcursor);
我的C#代码如下所示.我已经从几个课程中一起讨论了这个问题,所以希望它有意义.当我从数据库调用中提取数据时,我手动定义数据类型 – 我需要在C#代码中知道Oracle数据类型是什么
// setup procedure call
_oracleCommand = new OracleCommand("risk_pkg.get_risk", _conn.OracleConnection);
_oracleCommand.Parameters.Add(new OracleParameter("p_process_id", OracleDbType.Int64, processId, ParameterDirection.Input));
_oracleCommand.Parameters.Add(new OracleParameter("p_risk", OracleDbType.RefCursor, null, ParameterDirection.Output));
_oracleDataAdapter = new OracleDataAdapter(_oracleCommand);
_dataSet = new DataSet();
// call Oracle
_oracleDataAdapter.Fill(_dataSet);
// extract data - hand coded binding
Int64 dbRiskId = (Int64)_dataSet.Tables[0].Rows[0][_dataSet.Tables[0].Columns["risk_id"]];
Int64 dbClientId = (Int64)_dataSet.Tables[0].Rows[0][_dataSet.Tables[0].Columns["client_id"]];
return new Risk(dbRiskId, dbClientId);
这不一定是个问题 – 我只是想知道是否有更好的方法来使我的PL / SQL在它返回的内容中更加明显,并使我的C#代码不必知道Oracle数据类型 – 从数据库结构更改中封装我
接受的解决方案:这似乎是实用的解决方案.我仍然有点不满意我的Oracle程序没有明确定义它的返回类型,而是生命
解决方法:
(你应该发布你的测试代码样本.因为我不确定,如果我正确理解你的问题.)
返回的类型是Object,用于提供任何可能的返回值.你必须手动转换它.但是您可以为转换生成代码.使用此元信息定义表或文件:哪个存储过程返回哪些类型以及将转换的.Net类型.使用此元信息来创建C#代码.
我们将RefCursors填入DataTable.将表字段分配给适当的成员变量的代码是从我们的元表中生成的.
内容总结
以上是互联网集市为您收集整理的在C#中键入安全绑定到Oracle存储过程?全部内容,希望文章能够帮你解决在C#中键入安全绑定到Oracle存储过程?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。