0

0

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

php中文网

php中文网

发布时间:2016-06-07 15:01:50

|

1198人浏览过

|

来源于php中文网

原创

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

.net,ado.net,oracle,dbhelperora

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

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

程。

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

下面来做个程序测试

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

@@##@@@@##@@qiantian" 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());
            
          
        }

玄鲸Timeline
玄鲸Timeline

一个AI驱动的历史时间线生成平台

下载


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).NET中使用ORACLE函数和过程并输出参数(1).NET中使用ORACLE函数和过程并输出参数(1).NET中使用ORACLE函数和过程并输出参数(1)

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

4

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

1

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

18

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 8万人学习

python编程入门系列图文教程
python编程入门系列图文教程

共65课时 | 24.7万人学习

vscode其实很简单
vscode其实很简单

共72课时 | 29.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号