Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)
目录
一、引入参考
1. ConfigurationManager的调用前提:
2. NpgsqlConnection的调用前提:
3. OracleConnection的调用前提:
二、设置数据库链接字串
1. 在App.config中设定链接数据库详情
2. 获取数据库链接字串
三、调用
1.调用Oracle数据库
2.调用postgre数据库
3.结合不同数据库联合查询
一、引入参考
1. ConfigurationManager的调用前提:
方案总管 > 项目的“参考”> 右键-加入参考 > 在架构中勾选System.Configuration > 确定。
代码需引用:using System.Configuration;
2. NpgsqlConnection的调用前提:
点击工具栏的“工具” > NuGet套件管理员 > 管理方案的NuGet套件(程式若启动了,先终止运行) > 搜寻插件名Npgsql > 查看该项目是否安装。
代码需引用:using Npgsql;
3. OracleConnection的调用前提:
点击工具栏的“工具” > NuGet套件管理员 > 管理方案的NuGet套件(程式若启动了,先终止运行) > 搜寻插件名Oracle.ManagedDataAccess > 查看该项目是否安装。
代码需引用:using Oracle.ManagedDataAccess.Client;
二、设置数据库链接字串
1. 在App.config中设定链接数据库详情
<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup><appSettings><add key="BookOracle" value="User Id=Luobogan;Password=12345678;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XXX.XXX.XXX)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=Book)))"/><add key="BookPostgre" value="Host=10.XXX.XXX.XXX;Port=5432;Database=Book;Username=Luobogan;Password=12345678;"/></appSettings>
</configuration> 2. 获取数据库链接字串
// 获取Oracle链接字串时:
private string OracleConn = ConfigurationManager.AppSettings["BookOracle"].ToString();
// 获取postgre链接字串时:
private string PgConn = ConfigurationManager.AppSettings["BookPostgre"].ToString(); 三、调用
1.调用Oracle数据库
// 引入组件
using System.Configuration;
using System.Data;
using Oracle.ManagedDataAccess.Client;// 获取数据库信息&设置查询语句(读取设定)
private string OracleConn = ConfigurationManager.AppSettings["BookOracle"].ToString();
string bookpublishplace = "新闻出版社";
string OracleSql = $@"SELECT * FROM ""Book"" WHERE publishplace='{bookpublishplace}' ";// 查询Oracle数据库
DataTable GetResTb = OracleQuery(OracleSql, OracleConn);
List GetResList = GetResTb.AsEnumerable().Where(x => x.Field<string>("author") == "萝卜").Select(x => x.Field<string>("bookname")).Distinct().ToList();
public DataTable OracleQuery(string sql, string connstr)
{try{using (OracleConnection conn = new OracleConnection(connstr)){conn.Open();OracleCommand cmd = new OracleCommand(sql, conn);// 执行查询,以table形式返回查询结果OracleDataAdapter dataAdapter = new OracleDataAdapter(cmd);DataTable dt = new DataTable();dataAdapter.Fill(dt);conn.Close();return dt;// 执行新增/更新/删除,用数字0,1返回更新结果// int result = cmd.ExecuteNonQuery();// conn.Close();// return result;}}catch (Exception ex){// 执行查询,以空值null返回异常值return null;// 执行新增/更新/删除,用数字-1返回异常值// return -1;}
}// 执行Oracle数据库的存储过程
OracleParameter[] OracleParameters = new OracleParameter[] {new OracleParameter("存储过程栏位名1", OracleDbType.NVarchar2, 20, Factoryname, ParameterDirection.Input),new OracleParameter("存储过程栏位名2", OracleDbType.NVarchar2, 20, Factoryname, ParameterDirection.Input),new OracleParameter("返回存储过程Table1", OracleDbType.RefCursor, 40, "", ParameterDirection.Output),new OracleParameter("返回存储过程Table2", OracleDbType.RefCursor, 40, "", ParameterDirection.Output),new OracleParameter("return_sql", OracleDbType.NVarchar2, 20000, "", ParameterDirection.Output),new OracleParameter("return_code", OracleDbType.Int32, 6, 0, ParameterDirection.Output),
};
DataSet BookDataSet = OracleQueryProcedure(OracleConn, "执行过程名", OracleParameters);
authorname = '萝卜'
DataTable getResTb = BookDataSet.Tables[0];
DataRow[] rows = getResTb.Select($"author ='{authorname}'");
if (rows.Length > 0)
{getColumnRes = rows[0]["authorage"].ToString()
}public DataSet OracleQueryProcedure(string connstr, string procedurename, OracleParameter[] Parameter)
{try{using (OracleConnection conn = new OracleConnection(connstr)){conn.Open();OracleCommand cmd = new OracleCommand();cmd.CommandText = procedurename;cmd.Connection = conn;cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddRange(Parameter);cmd.ExecuteNonQuery();OracleDataAdapter dataAdapter = new OracleDataAdapter(cmd);DataSet ds = new DataSet();dataAdapter.Fill(ds);conn.Close();return ds;}}catch (Exception ex){return null;}
}// 批量插入Oracle数据库
private string targetConn = ConfigurationManager.AppSettings["OracleDB"].ToString();
DataTable resData = 获取的表数据;
Dictionary<string, string> AddColumnMappings = new Dictionary<string, string>() {{ "待插入datatable的栏位名", "数据库表的栏位名" },{ "book_id", "BOOKID" },{ "book_name", "BOOKNAME" },
};
var res = OracleBulkInsert(targetConn, "表名", resData, AddColumnMappings) == 1 ? "success" : "fail";
Console.WriteLine($"res:{res}");/// <summary>
/// Oracle数据库--批量插入
/// </summary>
/// <param name="connstr">数据库链接</param>
/// <param name="targettb">目标表</param>
/// <param name="dataTable">待插入数据</param>
/// <param name="AddColumnMappings">列名映射</param>
/// <returns>int</returns>
public int OracleBulkInsert(string connstr, string targettb, DataTable dataTable, Dictionary<string, string> AddColumnMappings)
{try{using (OracleConnection conn = new OracleConnection(connstr)){conn.Open(); using (var bulkCopy = new OracleBulkCopy(conn)) // 使用 OracleBulkCopy 来批量插入数据{bulkCopy.DestinationTableName = targettb; // 设置Oracle目标表名bulkCopy.BatchSize = 1000; // 每次批量插入1000行数据 foreach (var kvp in AddColumnMappings){bulkCopy.ColumnMappings.Add(kvp.Key, kvp.Value); // DataTable 的列名会映射到 Oracle 表的列名}bulkCopy.WriteToServer(dataTable); // 执行批量插入}return 1;}}catch (Exception ex){//throw ex;return -1;}
}
2.调用postgre数据库
在另一篇文章中:Backend - ADO.NET(C# 操作PostgreSQL DB)_c# postgresql-CSDN博客
3.结合不同数据库联合查询
以下写法是结合了ADO.NET 和 LINQ to Objects。
class CombineTb
{public string newbookname { get; set; } // 结合新表的栏位1public string newbookauthor { get; set; } // 结合新表的栏位2public string newbookplace { get; set; } // 结合新表的栏位3
}
string OracleSql = $@"SELECT * FROM Book' ";
string PgSql = $@"SELECT bookplace,author,bookname FROM BookPublish";
DataTable GetOracleResTb = OracleQuery(OracleSql, OracleConn);
DataTable GetPostgreResTb = PgQuery(PgSql, PgConn);
List<CombineTb> CombineData = (from a in GetOracleResTb.AsEnumerable()join b in GetPostgreResTb.AsEnumerable()on new { bookname = a.Field<string>("name"), author = a.Field<string>("author") } equalsnew { bookname = b.Field<string>("bookname"), author = b.Field<string>("authorname") }select new CombineTb{newbookname = b.Field<string>("bookname"),newbookauthor = b.Field<string>("authorname"),newbookplace = b.Field<string>("bookplace")}).Distinct().ToList();
List<string> authorList = CombineData.Where(x => x.newbookname == "数据结构").Select(x => x.newbookauthor).Distinct().ToList();
相关文章:
Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)
目录 一、引入参考 1. ConfigurationManager的调用前提: 2. NpgsqlConnection的调用前提: 3. OracleConnection的调用前提: 二、设置数据库链接字串 1. 在App.config中设定链接数据库详情 2. 获取数据库链接字串 三、调用 1.调用Oracle数据库…...
Idea-离线安装SonarLint插件地址
地址: SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..,选中下载好的插件,然后重启idea...
Leetcode Hot100 第三题 234. 回文链表
用快慢指针找到链表中间节点反转后面一段链表遍历每个节点做判断为什么是while pre: 不能写while head呢 ? 答:因为slow节点在反转后,他的前序节点除了反转之后的节点,之前正序的节点仍然存在的,即slow.pre 的next依旧是slow, 我…...
Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
工欲善其事,必先利其器。 学习Python的第一步不要再加收藏夹了!提高执行力,先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python,我们直接进入python官网下载即可 Python 官网:Welcome to Pyt…...
SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
使用Beetl开发网页时,在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下: (1)首先Spring Security框架需要允许js、css、图片资源免授权访问。 (2)网站开发时࿰…...
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现
ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现 目录 ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现1. ARIMA模型概述1.1 时间序列预测1.2 ARIMA的优势2. ARIMA的核心技术2.1 自回归 (AR)2.2 差分 (I)2.3 移动平…...
【Uniapp-Vue3】swiper滑块视图容器的用法
我们使用swiper标签就可以实现轮播图的效果。 一、swiper组件的结构 整体的轮播图使用swiper标签,轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…...
allure报告修改默认语言为中文
1、项目根目录创建.py文件,把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…...
国产3D CAD将逐步取代国外软件
在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...
GolangWeb开发- net/http模块
文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...
Vue2中使用Echarts
1.安装echarts 在项目根目录下,使用npm或yarn安装ECharts: npm install echarts --save 或者 yarn add echarts 2.在相应的vue页面中引入echarts <script> import * as echarts from "echarts"; </script> 3.代码解析 <…...
AI赋能服装零售:商品计划智能化,化危机为转机
在服装零售这片竞争激烈的战场上,每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时,许多品牌往往将危机归咎于外部环境。然而,真相往往更为深刻——“危机不是外部的,而是你的商品计…...
Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
龙蜥Linux系统部署docker21.1.3版本
龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...
django解决跨域问题
# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中: INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…...
【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…...
Git 从入门到精通
一、环境配置 下载地址:https://git-scm.com/downloads/ 二、用户配置 找到git bash git --version 查看当前版本 git config --global user.name szhipeng625 设置用户名 git config --global user.email szhipeng625gmail.com 设置邮箱 git config --global …...
vue3使用vue3-video-play播放m3u8视频
1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…...
使用API有效率地管理Dynadot域名,为文件夹中的域名统一设置电子邮件转发
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
台州华声汽车音响改装店推荐,资深玩家都去这几家
在汽车音响改装领域,选择一家靠谱的门店,往往比挑选器材本身更考验车主的眼光。对于追求极致听感的资深玩家而言,改装的成败不仅取决于喇叭、功放等硬件的参数,更在于安装工艺、声学调校与项目统筹能力。近期,笔者深度…...
3步搞定专业级流程图:dagre-d3终极可视化指南
3步搞定专业级流程图:dagre-d3终极可视化指南 【免费下载链接】dagre-d3 A D3-based renderer for Dagre 项目地址: https://gitcode.com/gh_mirrors/da/dagre-d3 还在为创建复杂的流程图而头疼吗?🤔 今天我要向大家介绍一个神奇的工具…...
[特殊字符]️ 信创服务器深度解析:从CPU到操作系统,一文搞懂国产化替代全栈方案
标签:信创 国产化 服务器 CPU选型 海光 鲲鹏 🎯 开篇导读 你是否在国产化替代项目中不知道选哪款CPU?网上搜到的信创资料要么只讲政策不讲技术,要么直接给产品列表却不解释选型逻辑。本文将从信创服务器的四层架构(硬…...
3步掌握智慧树自动学习:解放双手的课程自动化神器
3步掌握智慧树自动学习:解放双手的课程自动化神器 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频学习而烦恼吗?智慧…...
Dubbo学习笔记(快速入门)
一、分布式基础1.1 软件架构四大演变演变顺序:单体 → 垂直 → 分布式 → 微服务解释:架构进化本质:为了解决流量变大、代码变多、维护困难。1)单体架构所有模块一个工程,一个jar包,全部本地调用࿱…...
告别配置烦恼:一键脚本+环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作
告别配置烦恼:一键脚本环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作 作为一名长期在Mac上使用Gradle的开发者,你是否经历过这样的困扰:每次换新机器或升级Gradle版本后,都要手动查找libexec路径,…...
HCCL 集合通信:昇腾集群的参数同步引擎
大模型训练的本质是将一个超大矩阵乘法拆到多张 NPU 上并行计算,每张卡算完自己的分片后把梯度合并。合并操作就是集合通信。 HCCL(Huawei Collective Communication Library)是 CANN 的集合通信库,对应 NVIDIA NCCL。它不参与模…...
从DICOM到3D打印:手把手教你用3D Slicer处理医学影像全流程(含STL导出)
从DICOM到3D打印:医学影像处理全流程实战指南 在数字化医疗时代,将CT、MRI等医学影像转化为可触摸的3D打印模型,正在成为临床教学、手术规划和医患沟通的革命性工具。这套技术链条中最关键的桥梁,正是开源的3D Slicer平台——它能…...
用GEE和Landsat 8数据,5步搞定城市生态健康“体检报告”(附完整代码)
城市生态健康体检实战:用GEE和Landsat 8生成可视化评估报告 城市规划师和环保工作者常常需要快速评估城市生态状况,但传统方法耗时费力。Google Earth Engine(GEE)平台结合Landsat 8数据,为我们提供了一种高效解决方案…...
计算机毕业设计Python+AI大模型空气质量预测分析(可定制城市) 空气质量可视化 空气质量爬虫 机器学习 深度学习 大 数据毕业设计
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…...
