ASP.NET |日常开发中连接Oracle数据库详解

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

ASP.NET |日常开发中连接Oracle数据库详解

  • 前言
  • 一、安装和配置 Oracle 数据访问组件
    • 1.1 安装ODP.NET(Oracle Data Provider for.NET):
    • 1.2 引用相关程序集:
  • 二、配置连接字符串
    • 2.1 连接字符串的基本组成部分:
    • 2.2 不同连接方式的连接字符串示例
    • 2.3 执行数据库操作(以查询为例)
    • 2.4 插入、更新和删除操作(类似查询操作)
  • 结束语
  • 优质源码分享

ASP.NET |日常开发中连接Oracle数据库详解,在ASP.NET日常开发中,连接Oracle数据库并执行数据操作是一个常见的需求。为了实现与Oracle数据库的交互,你通常需要使用Oracle提供的数据访问组件,如Oracle Data Provider for .NET (ODP.NET)。以下是一个详细的步骤指南,介绍如何在ASP.NET应用程序中连接Oracle数据库。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

一、安装和配置 Oracle 数据访问组件

1.1 安装ODP.NET(Oracle Data Provider for.NET):

    ODP.NET是 Oracle 官方提供的用于在.NET 应用程序中访问 Oracle 数据库的数据访问组件。可以从 Oracle 官方网站下载适合的ODP.NET版本并进行安装。安装过程中需要根据你的开发环境(如 32 位或 64 位)和 Oracle 数据库版本进行选择。

1.2 引用相关程序集:

    在ASP.NET项目中,安装好ODP.NET后,需要在项目中引用相关的程序集。在解决方案资源管理器中,右键单击项目,选择 “添加引用”,然后在引用管理器中找到并添加Oracle.ManagedDataAccess(如果使用的是托管驱动)或Oracle.DataAccess(非托管驱动,不过在较新的开发中推荐使用托管驱动)程序集。同时,在代码文件中添加相应的using语句,如using Oracle.ManagedDataAccess.Client;(对于托管驱动)。

二、配置连接字符串

2.1 连接字符串的基本组成部分:

    连接 Oracle 数据库的连接字符串包含多个关键部分。一个典型的连接字符串格式如下:

       string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=your_host)(PORT=your_port))(CONNECT_DATA=(SERVICE_NAME=your_service_name)));User ID=your_user_id;Password=your_password";

    Data Source部分用于指定数据库的数据源信息,包括服务器地址(HOST)、端口(PORT)和服务名(SERVICE_NAME)。User ID和Password分别是用于登录数据库的用户名和密码。

2.2 不同连接方式的连接字符串示例

  • 使用 TNS 别名(如果已经配置了 TNS 别名):

    如果在TNSNAMES.ORA文件(通常位于ORACLE_HOME/network/admin目录下)中已经配置了 TNS 别名,可以直接在连接字符串中使用。例如:

           string connectionString = "Data Source=your_tns_alias;User ID=your_user_id;Password=your_password";
  • 连接到本地数据库(默认实例):

    对于本地安装的 Oracle 数据库,并且使用默认实例,可以使用类似如下的连接字符串:

           string connectionString = "Data Source=localhost/orcl;User ID=system;Password=your_password";

    这里假设本地数据库服务名为orcl,用户名是system。
    建立数据库连接
    创建连接对象并打开连接:
    使用OracleConnection(对于Oracle.DataAccess)或Oracle.ManagedDataAccess.Client.OracleConnection(对于Oracle.ManagedDataAccess)类来创建连接对象。例如:

       OracleConnection connection = new OracleConnection(connectionString);
       try
       {
           connection.Open();
           // 在这里可以执行数据库操作
       }
       catch (OracleException ex)
       {
           Console.WriteLine($"数据库连接错误: {ex.Message}");
       }
       finally
       {
           connection.Close();
       }

    在try - catch - finally块中,try部分用于打开连接并执行后续的数据库操作;catch部分用于捕获连接过程中可能出现的 Oracle 相关异常,如网络问题、权限问题等;finally部分确保无论操作是否成功,连接都会被关闭,以释放资源。

2.3 执行数据库操作(以查询为例)

  • 构建查询语句:

    在 Oracle 数据库中,查询数据使用SELECT语句。例如,查询一个名为employees表中所有员工的姓名和部门的 SQL 语句如下:

       SELECT employee_name, department_name FROM employees;
  • 在 C# 中执行查询操作:

    创建OracleCommand对象并设置查询语句和连接:

       string selectQuery = "SELECT employee_name, department_name FROM employees";
       OracleCommand command = new OracleCommand(selectQuery, connection);
       OracleDataReader reader;
       try
       {
           reader = command.ExecuteReader();
           while (reader.Read())
           {
               string name = reader.GetString(0);
               string department = reader.GetString(1);
               Console.WriteLine($"姓名: {name}, 部门: {department}");
           }
           reader.Close();
       }
       catch (OracleException ex)
       {
           Console.WriteLine($"数据查询错误: {ex.Message}");
       }

    首先通过ExecuteReader方法执行查询语句,返回一个OracleDataReader对象。然后使用reader.Read方法遍历结果集,通过GetString(也可以根据数据类型使用GetInt32、GetDate等方法)方法获取相应列的值,这里列索引从 0 开始。最后要记得关闭OracleDataReader对象,以释放资源。

2.4 插入、更新和删除操作(类似查询操作)

  • 插入操作:

    构建插入语句:在 Oracle 中,插入数据使用INSERT INTO语句。例如,插入一条员工记录到employees表的 SQL 语句如下:

       INSERT INTO employees (employee_name, department_name) VALUES ('John Doe', 'IT');

    在 C# 代码中,使用OracleCommand对象执行插入操作:

       string insertQuery = "INSERT INTO employees (employee_name, department_name) VALUES (:name, :department)";
       OracleCommand command = new OracleCommand(insertQuery, connection);
       command.Parameters.Add(":name", OracleDbType.Varchar2).Value = "John Doe";
       command.Parameters.Add(":department", OracleDbType.Varchar2).Value = "IT";
       try
       {
           int rowsAffected = command.ExecuteNonQuery();
           if (rowsAffected > 0)
           {
               Console.WriteLine("数据插入成功。");
           }
       }
       catch (OracleException ex)
       {
           Console.WriteLine($"数据插入错误: {ex.Message}");
       }

    这里使用了参数化查询,通过Parameters.Add方法添加参数,参数名以:开头(这是 Oracle 参数化查询的格式)。然后使用ExecuteNonQuery方法执行插入操作,根据返回的受影响行数判断插入是否成功。

  • 更新操作:

    构建更新语句:在 Oracle 中,更新数据使用UPDATE语句。例如,更新employees表中员工姓名为John Doe的部门为HR的 SQL 语句如下:

       UPDATE employees SET department_name = 'HR' WHERE employee_name = 'John Doe';

    在 C# 代码中构建和执行更新语句:

       string updateQuery = "UPDATE employees SET department_name = :newDepartment WHERE employee_name = :name";
       OracleCommand command = new OracleCommand(updateQuery, connection);
       command.Parameters.Add(":newDepartment", OracleDbType.Varchar2).Value = "HR";
       command.Parameters.Add(":name", OracleDbType.Varchar2).Value = "John Doe";
       try
       {
           int rowsAffected = command.ExecuteNonQuery();
           if (rowsAffected > 0)
           {
               Console.WriteLine("数据更新成功。");
           }
       }
       catch (OracleException ex)
       {
           Console.WriteLine($"数据更新错误: {ex.Message}");
       }

    同样使用参数化查询构建更新语句,通过ExecuteNonQuery方法执行更新操作,根据返回的受影响行数判断更新是否成功。

  • 删除操作:

    构建删除语句:在 Oracle 中,删除数据使用DELETE FROM语句。例如,删除employees表中员工姓名为John Doe的记录的 SQL 语句如下:

       DELETE FROM employees WHERE employee_name = 'John Doe';

    在 C# 代码中构建和执行删除语句:

       string deleteQuery = "DELETE FROM employees WHERE employee_name = :name";
       OracleCommand command = new OracleCommand(deleteQuery, connection);
       command.Parameters.Add(":name", OracleDbType.Varchar2).Value = "John Doe";
       try
       {
           int rowsAffecteds = command.ExecuteNonQuery();
           if (rowsAffecteds > 0)
           {
               Console.WriteLine("数据删除成功。");
           }
       }
       catch (OracleException ex)
       {
           Console.WriteLine($"数据删除错误: {ex.Message}");
       }

    还是使用参数化查询构建删除语句,然后执行ExecuteNonQuery方法,根据返回的受影响行数判断删除是否成功。

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------
 

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144309281(防止抄袭,原文地址不可删除)

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

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

相关文章

生成树协议STP工作步骤

第一步:选择根桥 优先级比较:首先比较优先级,优先级值越小的是根桥MAC地址比较:如果优先级相同,则比较MAC地址。MAC地址小的是根桥。 MAC地址比较的时候从左往右,一位一位去比 第二步:所有非根…

Redis是什么?Redis和MongoDB的区别在那里?

Redis介绍 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍: 一、数据结构支持 字符串(String) 这是Redis最…

minio 分布式文件管理

一、minio 是什么? MinIO构建分布式文件系统,MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数…

【射频IC学习笔记】4 D类功率放大器PA电路设计/loadpull仿真/输出功率及效率PAE计算

一、功率放大器设计指标及电路结构 1. 设计指标 功率放大器的指标要求如下图所示采用D类的开关类型功率放大器,理论上开关类型的PA能够做到100%的效率,但实际上会有一些偏差。像D类功放并不适合高功率射频信号的输出,因为其在射频功率上面的…

【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由…

Unity UGUI图片循环列表插件

效果展示: 下载链接:https://gf.bilibili.com/item/detail/1111843026 概述: LoopListView2 是一个与 UGUI ScrollRect 相同的游戏对象的组件。它可以帮助 UGUI ScrollRect 以高效率和节省内存的方式支持任意数量的项目。 对于具有10,000个…

5G学习笔记之SNPN系列之ID和广播消息

目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…

(后序遍历 简单)leetcode 101翻转二叉树

将根结点的左右结点看作 两个树的根结点,后序遍历(从叶子结点从下往上遍历) 两个树边遍历边比较。 左节点就左右根的后序遍历 右根结点就右左根的后序遍历来写 后序遍历(从叶子结点从下往上遍历) /*** Definition …

通过ajax的jsonp方式实现跨域访问,并处理响应

一、场景描述 现有一个项目A,需要请求项目B的某个接口,并根据B接口响应结果A处理后续逻辑。 二、具体实现 1、前端 前端项目A发送请求,这里通过jsonp的方式实现跨域访问。 $.ajax({ url:http://10.10.2.256:8280/ssoCheck, //请求的u…

Goby AI 2.0 自动化编写 EXP | Mitel MiCollab 企业协作平台 npm-pwg 任意文件读取漏洞(CVE-2024-41713)

漏洞名称:Mitel MiCollab 企业协作平台 npm-pwg 任意文件读取漏洞(CVE-2024-41713) English Name:Mitel MiCollab /npm-pwg File Read Vulnerability (CVE-2024-41713) CVSS core: 6.8 漏洞描述: Mitel MiCollab 是加拿大 Mitel 公司推出…

现代密码学总结(上篇)

现代密码学总结 (v.1.0.0版本)之后会更新内容 基本说明: ∙ \bullet ∙如果 A A A是随机算法, y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …

VMware:CentOS 7.* 连不上网络

1、修改网络适配 2、修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-e33# 修改 ONBOOTyes 3、重启网卡 service network restart 直接虚拟机中【ping 宿主机】,能PING通说明centOS和宿主机网络通了,只要宿主机有网,则 Ce…

Linux —— vim 编辑器

一、什么是vim vim是一个功能强大、高度可定制的文本编辑器。以下是对vim编辑器的具体介绍: 历史背景:vim最初由Bram Moolenaar在1991年开发,作为vi编辑器的增强版,增加了许多新的特性和改进。它继承了vi的基本编辑功能和键盘快捷…

前端(async 和await)

1 async async 将 function 变为成为 async 函数 ●async 内部可以使用 await,也可以不使用,因此执行这个函数时,可以使用 then 和 catch 方法 ●async 函数的返回值是一个 Promise 对象 ●Promise 对象的结果由 async 函数执行的返回值决…

huggingface NLP -Transformers库

1 特点 1.1 易于使用:下载、加载和使用最先进的NLP模型进行推理只需两行代码即可完成。 1.2 灵活:所有型号的核心都是简单的PyTorch nn.Module 或者 TensorFlow tf.kears.Model,可以像它们各自的机器学习(ML)框架中的…

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15&#xff1a;简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的…

Centos7上Jenkins+Docker+Git+SpringBoot自动化部署

文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK&#xff08;可选&#xff09; 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…

前端-自定义Ant Design 表格(可编辑表格)

选取的的是&#xff1a;表格 Table - Ant Design 其实ant design本身就有增加和删除单列数据的封装好的表格&#xff0c;但是个人觉得那个功能繁多&#xff0c;自己实现封装也便于之后理解和二次使用。 初步效果&#xff08;舍去切换样式的功能&#xff09;&#xff1a; 突破的…

如何打造个人知识体系?

第一&#xff0c;每个人的基本情况不同。比如我有一个类别跟「设计」相关&#xff0c;这是自己的个人爱好&#xff0c;但不一定适合其他人。再比如我还有一个类别跟「广告文案」相关&#xff0c;因为里面很多表达可以借用到演讲或写作中&#xff0c;这也不适合所有人。 第二&am…