CSharp: Oracle Stored Procedure query table

news2024/12/27 23:57:46

存储过程查询postgreSQL,Oracle 和sql server,Mysql 有区别。程序调用也是有区别。

oracle sql script:

CREATE OR REPLACE PROCEDURE procSelectSchool(
    paramSchoolId IN char,
    p_cursor OUT SYS_REFCURSOR
) AS
BEGIN
    OPEN p_cursor FOR
        SELECT *
        FROM School
        WHERE SchoolId = paramSchoolId;
END procSelectSchool;
/
 
-- 查询所有
CREATE OR REPLACE PROCEDURE SelectSchoolAll(
    p_cursor OUT SYS_REFCURSOR
) AS
BEGIN
    OPEN p_cursor FOR
        SELECT *
        FROM School;
END SelectSchoolAll;
/
        /// <summary>
        /// 查询存储过程
        /// 20241225
        /// </summary>
        /// <param name="sql">存储过程名称</param>
        /// <param name="cmdType"></param>
        /// <param name="pCursor">游标</param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static OracleDataReader GetReaderCursor(string sql, CommandType cmdType, OracleParameter pCursor, params OracleParameter[] sqlParams)
        {
            OracleCommand cmd = new OracleCommand();
            cmd.CommandType = cmdType;
            cmd.CommandText = sql;
            cmd.CommandTimeout = 1000;//
            if (sqlParams != null)
                cmd.Parameters.AddRange(sqlParams);
            cmd.Parameters.Add(pCursor);
            OracleConnection conn = GetConnection(true);
            cmd.Connection = conn;
            cmd.ExecuteNonQuery();
            return ((OracleRefCursor)pCursor.Value).GetDataReader();
        }


        /// <summary>
        /// 查询存储过程
        /// </summary>
        /// <param name="sql">存储过程名称</param>
        /// <param name="cmdType"></param>
        /// <param name="pCursor">游标</param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static DataTable GetDataTableCursor(string sql, CommandType cmdType, OracleParameter pCursor, params OracleParameter[] sqlParams)
        {
            DataTable dt = new DataTable();
            OracleCommand cmd = new OracleCommand();
            cmd.CommandType = cmdType;
            cmd.CommandText = sql;
            cmd.CommandTimeout = 1000;//
            if (sqlParams != null)
                cmd.Parameters.AddRange(sqlParams);
            cmd.Parameters.Add(pCursor);
            OracleConnection conn = GetConnection(true);
            cmd.Connection = conn;
            // 使用OracleDataAdapter来填充DataSet
            using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
            {
                DataSet dataSet = new DataSet();
                // 你可以指定一个表名,也可以不指定,让系统自动生成一个表名
                adapter.Fill(dataSet, "ds");
                dt = dataSet.Tables[0];

            }
            return dt;
        }

DAL:

       ///<summary>
       ///存储过程  查询记录
       ///https://docs.oracle.com/en/database/oracle/oracle-data-access-components/19.3.2/odpnt/extenBoth.html
       ///https://github.com/oracle/dotnet-db-samples/
	///</summary>
	///<param name="schoolId">输入参数:SchoolId</param>
	///<returns>返回SchoolInfo</returns>
	public SchoolInfo SelectSchool(string schoolId)
	{
		SchoolInfo school = null;
		try
		{
               //添加输入参数
               OracleParameter par =new OracleParameter("paramSchoolId", OracleDbType.NChar); // 参数和函数名,都要用小写  OracleDbType.NChar
               par.Value=schoolId;
               // 添加输出参数(REF CURSOR)
               OracleParameter p_cursor = new OracleParameter
               {
                   ParameterName = "p_cursor",
                   OracleDbType = OracleDbType.RefCursor,
                   Direction = ParameterDirection.Output
               };              
               using (OracleDataReader reader = OracleHelper.GetReaderCursor(databaserole + "procSelectSchool", CommandType.StoredProcedure, p_cursor,par))
			{
				if (reader.Read())
				{
					school = new SchoolInfo();
					school.SchoolId =(!DBNull.Equals(reader["SchoolId"],null))? (string) reader["SchoolId"].ToString():"";
					school.SchoolName =(!DBNull.Equals(reader["SchoolName"],null))? (string) reader["SchoolName"].ToString():"";
					school.SchoolTelNo =(!DBNull.Equals(reader["SchoolTelNo"],null))? (string) reader["SchoolTelNo"].ToString():"";
					
				}
			}
		}
		catch (OracleException ex)
		{
			throw ex;
		}
		return school;
	}

       ///<summary>
       ///存储过程  查询所有记录
       ///</summary>
       ///<param name="schoolId">无输入参数</param>
       ///<returns>返回表所有记录(List)SchoolInfo</returns>
       public List<SchoolInfo> SelectSchoolAll()
	{
		List<SchoolInfo> list = new List<SchoolInfo>();
		SchoolInfo school = null;
		try
		{
               // 添加输出参数(REF CURSOR)
               OracleParameter p_cursor = new OracleParameter
               {
                   ParameterName = "p_cursor",
                   OracleDbType = OracleDbType.RefCursor,
                   Direction = ParameterDirection.Output
               };

               using (OracleDataReader reader = OracleHelper.GetReaderCursor(databaserole + "procSelectSchoolAll", CommandType.StoredProcedure, p_cursor, null))
			{
				while (reader.Read())
				{
					school = new SchoolInfo();
					school.SchoolId =(!DBNull.Equals(reader["SchoolId"],null))? (string) reader["SchoolId"].ToString():"";
					school.SchoolName =(!DBNull.Equals(reader["SchoolName"],null))? (string) reader["SchoolName"].ToString():"";
					school.SchoolTelNo =(!DBNull.Equals(reader["SchoolTelNo"],null))? (string) reader["SchoolTelNo"].ToString():"";
					list.Add(school);
					
				}
			}
		}
		catch (OracleException ex)
		{
			throw ex;
		}
		return list;
	}
	///<summary>
	///存储过程  查询所有记录
	///</summary>
	///<param name="schoolId">无输入参数</param>
	///<returns>返回(DataTable)School表所有记录</returns>
	public DataTable SelectSchoolDataTableAll()
	{
		DataTable dt = new DataTable();
		try
		{
               // 添加输出参数(REF CURSOR)
               OracleParameter p_cursor = new OracleParameter
               {
                   ParameterName = "p_cursor",
                   OracleDbType = OracleDbType.RefCursor,
                   Direction = ParameterDirection.Output
               };

               using (DataTable reader = OracleHelper.GetDataTableCursor(databaserole + "SelectSchoolAll", CommandType.StoredProcedure, p_cursor, null))
			{
				dt = reader;
					
				
			}
		}
		catch (OracleException ex)
		{
			throw ex;
		}
		return dt;
	}

调用:

    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Form1_Load(object sender, EventArgs e)
    {
        try
        {
            SchoolBLL bLL = new SchoolBLL();

            this.dataGridView1.DataSource = bLL.SelectSchoolDataTableAll();
            SchoolInfo info = bLL.SelectSchool("U0002");
            if (info != null)
            {
                this.txtId.Text = info.SchoolId;
                this.txtName.Text = info.SchoolName;
                this.txtTel.Text = info.SchoolTelNo;

            }
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
        }
    }

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macos 隐藏、加密磁盘、文件

磁盘加密 打开磁盘工具 点击添加 设置加密参数 设置密码 查看文件 不用的时候右键卸载即可使用的时候装载磁盘&#xff0c;并输入密码即可 修改密码 解密 加密&#xff0c;输入密码即可 禁止开机自动挂载此加密磁盘 如果不禁止自动挂载磁盘&#xff0c;开机后会弹出输入…

cesium入门学习一

1.学习目的 作为网页显示&#xff0c;我只要实现了cesium网页显示&#xff0c;就可以到时候通过qt的webview显示html界面&#xff0c;来显示地图&#xff0c;js对于学过c的人而言&#xff0c;没啥难度&#xff0c;不过是换一种语法&#xff0c;而且cesium的教程相对于osgeart…

dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端

前情提要 交互场景&#xff1a;dify的ChatFlow上传文件(本示例是单张图片)&#xff0c;通过HTTP请求至SpringBoot后端dify版本&#xff1a;0.13.2python版本&#xff1a;3.12.7 1. 自定义上传变量 在【开始】节点自定义变量单文件上传变量file 2. 下接HTTP请求节点 BODY要…

Flutter DragTarget拖拽控件详解

文章目录 1. DragTarget 控件的构造函数主要参数&#xff1a; 2. DragTarget 的工作原理3. 常见用法示例 1&#xff1a;实现一个简单的拖拽目标解释&#xff1a;示例 2&#xff1a;与 Draggable 结合使用解释&#xff1a; 4. DragTarget 的回调详解5. 总结 DragTarget 是 Flutt…

深度学习blog-Transformer-注意力机制和编码器解码器

注意力机制&#xff1a;当我们看一个图像或者听一段音频时&#xff0c;会根据自己的需求&#xff0c;集中注意力在关键元素上&#xff0c;以获取相关信息。 同样地&#xff0c;注意力机制中的模型也会根据输入的不同部分&#xff0c;给它们不同的权重&#xff0c;并集中注意力在…

改进爬山算法之一:随机化爬山法(Stochastic Hill Climbing,SHC)

随机化爬山法(Stochastic Hill Climbing),也被称为随机爬山法,是一种基于搜索算法的优化方法,是爬山算法的一个变种,它通过引入随机性来减少算法陷入局部最优解的风险,并增加搜索解空间的能力。这种方法特别适合于解决那些具有多个局部最优解的优化问题。 一、算法思想 …

AntDB 分布式集群模式部署

1 说明 如下图所示&#xff0c;AntDB 分布式数据库&#xff0c;包含计算节点&#xff08;CN&#xff09;、数据节点&#xff08;DN&#xff09;、全局事务管理 节点&#xff08;GTM&#xff09;和集群管理节点&#xff08;MGR&#xff09;&#xff0c;共 4 个组成部分。 在…

Mysql数据库Redo日志和Undo日志的理解

数据库redo日志和undo日志 1、redo日志1.1 redo日志的作用1.1.1 不使用redo日志的问题1.1.2 使用redo日志的好处 1.2 redo日志刷盘策略 2、undo日志2.1 undo日志的作用2.2 undo日志的简要生成过程 1、redo日志 事务的4大特性&#xff08;ACID&#xff09;&#xff1a;原子性、…

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author&#xff1a;Once Day Date&#xff1a;2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档&#xff1a;GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…

循环神经网络(RNN)入门指南:从原理到实践

目录 1. 循环神经网络的基本概念 2. 简单循环网络及其应用 3. 参数学习与优化 4. 基于门控的循环神经网络 4.1 长短期记忆网络&#xff08;LSTM&#xff09; 4.1.1 LSTM的核心组件&#xff1a; 4.2 门控循环单元&#xff08;GRU&#xff09; 5 实际应用中的优化技巧 5…

腾讯云云开发 Copilot 深度探索与实战分享

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 一、引言 二、产品介绍 三、产品体验过程 四、整体总结 五、给开发者的复用建议 六、对 AI 辅助开发的前景展望 一、引言 在当今数字化转型加速的时代&#xff0c;…

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

基于python的电子报实现思路

一种基于PDF生成电子报的思路 需求提出实现思路&#xff1a;技术路线核心代码&#xff1a; 需求提出 最近公司提出了一个电子报的需求&#xff0c;可看网上实现的思路基本上是方正系列的排版软件实现的&#xff0c;公司没必要买这么一套&#xff0c;于是按照自己的思路搞了一个…

【HarmonyOS NEXT】鸿蒙原生应用“上述”

鸿蒙原生应用“上述”已上架华为应用市场&#xff0c;欢迎升级了鸿蒙NEXT系统的用户下载体验&#xff0c;用原生更流畅。 个人CSDN鸿蒙专栏欢迎订阅&#xff1a;https://blog.csdn.net/weixin_44640245/category_12536933.html?fromshareblogcolumn&sharetypeblogcolumn&a…

IntelliJ IDEA中设置激活的profile

在IntelliJ IDEA中设置激活的profile&#xff0c;可以通过以下步骤进行&#xff1a; 通过Run/Debug Configurations设置 打开Run/Debug Configurations对话框&#xff1a; 在IDEA的顶部菜单栏中&#xff0c;选择“Run”菜单&#xff0c;然后点击“Edit Configurations...”或者…

抖去推碰一碰系统技术源码/open SDK转发技术开发

抖去推碰一碰系统技术源码/open SDK转发技术开发 碰一碰智能系统#碰碰卡系统#碰一碰系统#碰一碰系统技术源头开发 碰碰卡智能营销系统开发是一种集成了人工智能和NFC技术的工具&#xff0c;碰碰卡智能营销系统通过整合数据分析、客户关系管理、自动化营销活动、多渠道整合和个…

jumpserver docker安装

#安装jumpserver最新版本&#xff08;当前最新版本v4.5.0-ce&#xff09; curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash#登录 http://192.168.31.168/ 默认账号密码 admin/ChangeMe 修改后&#xff1a; ad…

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件&#xff0c;”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件” BiliBili视频链接&#xff1a; Linux shell脚本对常见图片格式批量转换…

详细介绍Sd-WebUI提示词的语法规则

AI绘画中最大的门槛就是提示词&#xff0c;对英语水平、文学水平、想象力、灵感等要求较高。不能每次一输入正向提示词&#xff08;positive prompt&#xff09;&#xff0c;就只会写a girl, big eyes, red hair。虽然sd-webui软件可以直接翻译&#xff0c;输入一个子母后会立刻…

对Python中队列三种实现方式的测试

一、结论 本程序模拟比较队列的三种情况&#xff1a; 一、deque当作队列使用&#xff1b; 二、queue当作队列使用&#xff1b; 三、list当作队列使用。 结论&#xff1a; Python队列可以用deque、queue、list实现&#xff0c;其中list极慢、queue较慢&#xf…