C# VS2022+WinForm+Oracle19.3+存储过程,SQL和代码分离

【我的目的】:SQL和代码分别存放在不同的地方,便于随时修改SQL的内容,也便于修改SQL的书写格式
方案1:把SQL存放在DataSet.xsd中实现SQL和代码分离
方案2:用存储过程实现SQL和代码分离

我最倾向方案1,利用DataSet.xsd自动生成insert和update、select方法,可以非常方便的管理SQL和操作DB,然而却没有实现,只能退而求其次,选择方案2。在实现方案2的时候,最初也失败了,但是在写博客复现整个过程的时候,却成功了,非常意外,特此记录,与君分享。

CSDN上所能查到的博客,都是很不完整的记录,基本上都是只有代码,甚至是部分代码,很难根据代码复现C#调用Oracle存储过程
。希望我的完整记录能帮助到需要的人,包括我自己

目录

    • 0.完成下面开发环境的准备
      • 1 操作系统Win11 专业版 21H2
      • 2 oracle 19.3
      • 3 Visual Studio Community 2022
    • 1 C#工程准备
      • 1.1 新建工程
      • 1.2 添加控件
      • 1.3 添加dll
    • 2 数据库准备
      • 2.1 创建用户并连接DB
      • 2.2 创建表
      • 2.3 创建存储过程
    • 3 书写代码
      • 3.1 添加Settings1.settings,生成数据库连接串。
      • 3.2 button1_click方法添加代码

0.完成下面开发环境的准备

1 操作系统Win11 专业版 21H2

2 oracle 19.3

下载和安装手顺:https://blog.csdn.net/u011159350/article/details/125432921

3 Visual Studio Community 2022

下载地址:https://visualstudio.microsoft.com/zh-hans/vs/community/
下载后双击,选择下面两项,并安装

在这里插入图片描述
在这里插入图片描述

1 C#工程准备

1.1 新建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是创建后的工程界面:
在这里插入图片描述

1.2 添加控件

在这里插入图片描述
重复上述步骤,添加"TextBox"、"Button"控件在这里插入图片描述
双击button1
在这里插入图片描述
ctrl+shift+s,可以全部保存
在这里插入图片描述

1.3 添加dll

在这里插入图片描述
搜索内容:System.Data.OracleClient
在这里插入图片描述
下图选择“确定”
在这里插入图片描述
下图选择“我接受”
在这里插入图片描述
安装完毕,参照下图:
在这里插入图片描述

2 数据库准备

2.1 创建用户并连接DB

CREATE USER naruto IDENTIFIED BY "123456";

GRANT CREATE SESSION, CREATE VIEW, ALTER SESSION, CREATE SEQUENCE TO naruto;
GRANT CREATE SYNONYM, CREATE DATABASE LINK, RESOURCE , UNLIMITED TABLESPACE TO naruto;

ALTER SESSION SET CURRENT_SCHEMA=naruto;
ALTER SESSION SET NLS_LANGUAGE=American;
ALTER SESSION SET NLS_TERRITORY=America;

在这里插入图片描述

参照下图,连接DB
用户名:naruto
密码:123456
主机名:localhost
端口:1521
sid:orcl
在这里插入图片描述

2.2 创建表

/*
-- 作成表的中文名:人员信息表
-- 作成表的英文名:M_MEMBER
-- 作成组织:无
-- 作成日期:2023/07/30
-- 作成者:烟图黛螺
-- 修改历史:2023/07/30 烟图黛螺 新建文件
*/

------- 永久删除表,不进入回收站 ----------
DROP TABLE M_MEMBER PURGE;
/

------- 创建表 ----------
CREATE TABLE M_MEMBER (
     MEMBER_ID           VARCHAR2(5 CHAR) NOT NULL
    ,SEX                 VARCHAR2(1 CHAR)
    ,HOME_ADDRESS        VARCHAR2(200 CHAR)
    ,BIRTH_YMD           VARCHAR2(8 CHAR)
);
/

-------添加主键索引----------
ALTER TABLE M_MEMBER ADD CONSTRAINT PK_M_MEMBER PRIMARY KEY (MEMBER_ID);
/

------- 添加表和列名的注释 ----------
COMMENT ON TABLE M_MEMBER IS '人员信息表';
/
COMMENT ON COLUMN M_MEMBER.MEMBER_ID IS '人员ID';
/
COMMENT ON COLUMN M_MEMBER.SEX IS '性别';
/
COMMENT ON COLUMN M_MEMBER.HOME_ADDRESS IS '家乡地址';
/
COMMENT ON COLUMN M_MEMBER.BIRTH_YMD IS '出生年月日';
/

在这里插入图片描述

2.3 创建存储过程

CREATE OR REPLACE PACKAGE PC_TEST AS

PROCEDURE PR_INSERT_TEST (
     LV_MEMBER_ID  IN  VARCHAR2 -- 人员ID
    ,LV_RESULT     OUT VARCHAR2 -- 返回结果
);

END PC_TEST;
/

在这里插入图片描述

CREATE OR REPLACE PACKAGE BODY PC_TEST AS

PROCEDURE PR_INSERT_TEST (
     LV_MEMBER_ID  IN  VARCHAR2 -- 人员ID
    ,LV_RESULT     OUT VARCHAR2 -- 返回结果
) IS
BEGIN
INSERT INTO M_MEMBER (
                       MEMBER_ID
                      ,SEX
                      ,HOME_ADDRESS
                      ,BIRTH_YMD
                     ) VALUES (
                       LV_MEMBER_ID
                      ,'男'
                      ,'火影大陆木叶村'
                      ,'29991231'
                     );

LV_RESULT := '正常';
EXCEPTION
    WHEN OTHERS
    THEN
        LV_RESULT := '异常';

END PR_INSERT_TEST;
END PC_TEST;
/

在这里插入图片描述

3 书写代码

3.1 添加Settings1.settings,生成数据库连接串。

鼠标右键点击“WinFormApp1",然后依次选择:”添加"->”新建项"
在这里插入图片描述
在弹出的窗口上,选择“设置文件”,名称默认即可,然后选择“添加“按钮。
在这里插入图片描述
在这里插入图片描述
修改名称:,这时“范围”列的值,被自动变更为“应用程序”了。
在这里插入图片描述
在这里插入图片描述
下图窗口,输入内容:
服务器名:localhost:1521/orcl
用户名:system
密码:123456
选择“保存密码”
输入完毕后,点击“测试连接”按钮,目的测试输入内容能否连接DB。
在这里插入图片描述
点击“测试连接”按钮后,出现下图说明连接成功!!!
在这里插入图片描述

依次关闭上面的两个窗口后,弹出下面的警告窗口,点击“是”。
在这里插入图片描述
自动生成内容:Data Source=localhost:1521/orcl;Persist Security Info=True;User ID=naruto;Password=123456;Unicode=True
在这里插入图片描述

记得随时保存,ctrl+shift+s,保存

3.2 button1_click方法添加代码

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                OracleConnection connection = new OracleConnection(Settings1.Default.connectionstring);
                OracleCommand cmd = connection.CreateCommand();

                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "PC_TEST.PR_INSERT_TEST";

                OracleParameter op_in = new OracleParameter("LV_MEMBER_ID", OracleType.VarChar, 200);
                op_in.Value = textBox1.Text;
                op_in.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(op_in);

                OracleParameter op_out = new OracleParameter("LV_RESULT", OracleType.VarChar, 200);
                op_out.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(op_out);

                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();
                cmd.Dispose();

                textBox2.Text = op_out.Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

可以看到下面窗口中的代码没有SQL语句,十分干净,实现了SQL和代码分离。
在这里插入图片描述
画面起来后,输入102,点击按钮button1
在这里插入图片描述
第2个TextBox,成功取得存储过程的返回值"正常"
在这里插入图片描述
数据也登陆到了数据库当中。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全(黑客)自学误区

前言 网络安全是当今社会中至关重要的议题。随着科技的迅猛发展,网络已经渗透到我们生活的方方面面,给我们带来了巨大的便利和机遇。然而,网络也存在着各种风险和威胁,如黑客攻击、数据泄露等。因此,学习网络安全知识…

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试? 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的,在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响,过早进入性能测试会出现测试结果不准确、浪费测试资…

一文学会redis在springBoot中的使用

“收藏从未停止,练习从未开始”,或许有那么一些好题好方法,在被你选中收藏后却遗忘在收藏夹里积起了灰?今天请务必打开你沉甸甸的收藏重新回顾,分享一下那些曾让你拍案叫绝的好东西吧! 一、什么是redis缓存…

万年历【小游戏】(Java课设)

系统类型 Java实现的小游戏 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Idea或eclipse 运行效果 更多Java课设系统源码地址:更多Java课设系统源码地址 更多Java小游戏运行效果展示:更多Java小游戏运行效果展…

JavaScript学习 -- 对称加密算法DES

在现代的互联网时代,数据安全性备受关注。为了保护敏感数据的机密性,对称加密算法是一种常用的方法。在JavaScript中,DES(Data Encryption Standard)是一种常用的对称加密算法。本篇博客将为您展示如何在JavaScript中使…

Unity 四元素

//-------------旋转------------ // //设置角度 (超过90或负数时,会设置-1结果是359这样的问题,可以使用下面旋转的方式) transform.rotate new Quaternion(0,0,0,0);//Quaternion四元数 transform.localEulerAngles new Vector3(0,0,0);//EulerA…

企业电子招投标采购系统源码之-java spring cloud+spring boot

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

Restful的详细介绍~

RESTFUL简介: Restful是我们看待服务器的一种方式,我们都知道Java一切皆对象,因此在Java中,我们可以将所有的内容都看成对象,而在这里,RESTFUL是我们看待服务器的一种方式,我们可将服务器中的所…

idea中设置maven本地仓库和自动下载依赖jar包

1.下载maven 地址&#xff1a;maven3.6.3 解压缩在D:\apache-maven-3.6.3-bin\apache-maven-3.6.3\目录下新建文件夹repository打开apache-maven-3.6.3-bin\apache-maven-3.6.3\conf文件中的settings.xml编辑&#xff1a;新增本地仓库路径 <localRepository>D:\apache-…

ChatGPT与高等教育变革:价值、影响及未来发展

最近一段时间&#xff0c;ChatGPT吸引了社会各界的目光&#xff0c;它可以撰写会议通知、新闻稿、新年贺信&#xff0c;还可以作诗、写文章&#xff0c;甚至可以撰写学术论文。比尔盖茨、马斯克等知名人物纷纷为此发声&#xff0c;谷歌、百度等知名企业纷纷宣布要提供类似产品。…

WIZnet W5100S-EVB-Pico DHCP 配置教程(三)

DHCP协议介绍 什么是DHCP&#xff1f; 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和配置。 DHCP于1993年10月成为标准协议&#xff0c;其前身是BOOTP协议。DHCP协议由…

ceph集群中RBD的性能测试、性能调优

文章目录 rados benchrbd bench-write测试工具Fio测试ceph rbd块设备的iops性能测试ceph rbd块设备的带宽测试ceph rbd块设备的延迟 性能调优 rados bench 参考&#xff1a;https://blog.csdn.net/Micha_Lu/article/details/126490260 rados bench为ceph自带的基准测试工具&am…

常见网关对比

常见网关对比 目前常见的开源网关大致上按照语言分类有如下几类&#xff1a; Nginxlua &#xff1a;OpenResty、Kong、Orange、Abtesting gateway 等 Java &#xff1a;Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等 Go &#xff1a;Janus、fa…

多线程只需这一篇足够

开玩笑的 本篇详细讲述了多线程的各种细节及操作方法 对锁的各种操作&#xff0c;以及原子性的阐述 原谅我嚣张的标题 Begin&#xff1a;本篇文章尽可能详细的讲述了线程的概念、使用、安全问题&#xff0c;以及消费者生产者模型的设计理念和实现代码。对于单例模式的两种实现代…

spring6——容器

文章目录 容器&#xff1a;IocIoc容器控制反转&#xff08;Ioc&#xff09;依赖注入IoC容器在Spring的实现 基于XML管理Bean搭建环境获取bean依赖注入setter注入构造器注入特殊值处理字面量赋值null值xml实体CDATA节 特殊类型属性注入为对象类型属性赋值方式一&#xff1a;引入…

1400*B. I Hate 1111(思维+数学)

Example input 3 33 144 69 output YES YES NO 题意&#xff1a; 问一个数字是否可以由 11&#xff0c;111&#xff0c;1111&#xff0c;11111...... 任意倍数加和所得。 解析&#xff1a; 可以观察到 1111%110&#xff0c;11111%1110&#xff0c;而后面更大的11111111…

Python入门【函数用法和底层分析、函数简介 、函数的定义和调用、形参和实参、文档字符串(函数的注释) 、函数也是对象,内存底层分析】(十)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

在 “小小容器” WasmEdge 里运行小小羊驼 llama 2

昨天&#xff0c;特斯拉前 AI 总监、OpenAI 联合创始人 Andrej Karpathy 开源了 llama2.c 。 只用 500 行纯 C 语言就能训练和推理 llama 2 模型的框架&#xff0c;没有任何繁杂的 python 依赖。这个项目一推出就受到大家的追捧&#xff0c;24 小时内 GitHub 收获 4000 颗星&am…

机器学习深度学习——权重衰减

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——模型选择、欠拟合和过拟合 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你…

Spring Boot 缓存 Cache 入门

Spring Boot 缓存 Cache 入门 1.概述 在系统访问量越来越大之后&#xff0c;往往最先出现瓶颈的往往是数据库。而为了减少数据库的压力&#xff0c;我们可以选择让产品砍掉消耗数据库性能的需求。 当然也可以引入缓存,在引入缓存之后&#xff0c;我们的读操作的代码&#xff…