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

news2024/12/12 10:27:13

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

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(防止抄袭,原文地址不可删除)

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

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

相关文章

ChatGPT 4:解锁AI文案、绘画与视频创作新纪元

文章目录 AI文案:激发文字的魅力,重塑营销与传播AI绘画:解锁艺术的无限可能,激发创意灵感AI视频:重塑视频创作流程,提升制作效率GPTs:构建个性化AI应用,赋能各行各业《ChatGPT 4 应用…

使用html 和javascript 实现微信界面功能1

1.功能说明: 搜索模块: 提供一个搜索框,但目前没有实现具体的搜索功能。 好友模块: 在左侧的“好友”部分有一个“查看好友”按钮。点击左侧的“查看好友”按钮时,会在右侧显示所有好友的列表。列表中每个好友可以点击查看详情,包…

常用的注解

RequestMapping 用于映射请求路径 可以添加在类或方法上 请求类型 请求类型包括GET、POST、PUT、DELETE等 默认支持GET和POST两种方式 简写:GetMapping、PostMapping、PutMapping、DeleteMapping PostMapping("/buy") 等价 RequestMapping("/buy&quo…

【操作系统】实验二:观察Linux,使用proc文件系统

实验二 观察Linux,使用proc文件系统 实验目的:学习Linux内核、进程、存储和其他资源的一些重要特征。读/proc/stat文件,计算并显示系统CPU占用率和用户态CPU占用率。(编写一个程序使用/proc机制获得以及修改机器的各种资源参数。…

Mysql体系架构剖析——岁月云实战笔记

1 体系架构 理论内容阅读了mysql体系架构剖析,其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务,引入线程池,允许多台客户端连接,主要工作:连接处理、授权认证、安全防护、管理连接等。 连接处理&a…

算法基础Day7(动态规划)

文章目录 1.题目2.题目解答1.第N个泰波那契数题目及题目解析动态规划算法学习1.状态表示2.状态转移方程3.初始化4.填表顺序5.空间优化 代码提交空间优化 2.三步问题题目及题目解析算法学习代码提交 1.题目 1137. 第 N 个泰波那契数 - 力扣(LeetCode)面试…

Python基础笔记17--面向对象(其他)

一、面向对象的三大特性 1、封装 1、 将属性和⽅法书写到类的⾥⾯的操作 2、封装可以为属性和⽅法添加私有权限 2、继承 1、⼦类默认继承⽗类的所有属性和⽅法 2、⼦类可以重写⽗类属性和⽅法 3、多态 1、 传⼊不同的对象,产⽣不同的结果 二、多态 多态指⼀类事…

梳理你的思路(从OOP到架构设计)_基本OOP知识03

目录 1、<基类/子类 >结构的接口(卡榫函数) 1&#xff09;卡榫(Hook) 2&#xff09;卡榫函数的Java实现 2、IoC机制与基於 Default 軟硬整合觀點 函数 1&#xff09;卡榫函数实现IoC机制 2&#xff09;默认(Default)行为 1、<基类/子类 >结构的接口(卡榫函数…

Y3编辑器官方文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)

文章目录 一、新建项目二、 编辑器主界面2.1 游戏场景2.2 导航栏/菜单栏2.3 功能栏三、菜单栏详细介绍3.1 文件3.1.1 版本管理3.1.2 项目管理(多关卡)3.1.2.1 多关卡功能说明3.1.2.2 关卡切换与关卡存档3.2 编辑3.2.1 通用设置3.2.2 键位设置3.3 窗口(日志)3.4 细节3.4.1 语言…

微信小程序横屏页面跳转后,自定义navbar样式跑了?

文章目录 问题原因&#xff1a;解决方案&#xff1a; 今天刚遇到的问题&#xff0c;横屏的页面完成操作后跳转页面后&#xff0c;自定义的tabbar样式乱了&#xff0c;跑到最顶了&#xff0c;真机调试后发现navbar跑到手机状态栏了&#xff0c;它正常应该跟右边胶囊一行。 知道问…

十五、K8s计划任务JobCronJob

K8s计划任务CronJob&Job 一、Job可以干什么 Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 pod,这个 pod 专门用来备份用的,备份结束 pod 就可以终止了,不需要重启,而是将 Pod…

【开源】基于SpringBoot框架美容院管理系统(计算机毕业设计)+万字说明文档 T012

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

基于卷积神经网络的垃圾分类系统实现(GUI应用)

1.摘要 本文主要实现了一个卷积神经网络模型进行垃圾图像分类&#xff0c;为了提高垃圾分类模型的准确率&#xff0c;使用使用Batch Normalization层、使用早期停止策略来防止过拟合等方法来优化模型&#xff0c;实验结果显示最终优化后的模型准确率较高90%左右。最终&#xf…

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多&#xff0c;需要不断的去学习和使用&#xff0c;现系统性的整理一下。以备录&#xff1b; 1.创建pro文件 1.1 步骤&#xff1a; Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

软件测试--录制与回放脚本

准备工作 安装phpstudy 配置两个内容 放demo44文件夹 在浏览器输入http://localhost/demo44/index.html&#xff0c;出现如图所示的网站 输入用户名和密码 步骤一&#xff1a;打开Virtual User Generator&#xff0c;点击新建&#xff0c;点击new 步骤二&#xff1a;点击如下…

WEB安全基础知识

WAF全称为Web Application Firewall&#xff08;网页应用防火墙&#xff09;是一种专门设计用来保护web应用免受各种网络攻击的安全防护措施。它位于客户端与服务器之间&#xff0c;监控和过滤HTTP流量&#xff0c;从而拦截恶意请求、识别并防御常见的web攻击。 WAF的主要功能…

android studio kotlin 本地c++工程添加oboe库的方法

1.新建本地c++的kotlin工程hellohao 如图 2.把开源的oboe源文件src、include、CMakelists.txt、debug-utils复制hellohao目录下 3.修改hellohao\app目录下的CMakelists.txt cmake_minimum_required(VERSION 3.22.1) project(hellohao LANGUAGES C CXX)get_filename_component…

ElasticSearch常见的索引_集群的备份与恢复方案

方案一&#xff1a;使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移&#xff0c;包括全量、增量备份和恢复。 方案二&#xff1a;通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移&#xff0c;或者跨集…

cefsharp131.2.70升级cefsharp131.3.10( Chromium 131.0.6778.109)NETCore 版本升级体验

一、版本 cefsharp 131.3.10 小版本升级:cefsharp 131.2.70>>cef 131.3.10 CEF 131.3.1+gcb062df+chromium-131.0.6778.109 / Chromium 131.0.6778.109 二、测试(html5test)

#自定义数据类型-模拟进程执行

#include <iostream> #include <string> #include <iomanip> using namespace std;//定义一个名为process的结构体&#xff0c;用于表示进程相关信息 //包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员 struct process {string …