c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题

最近做项目,要跟对方系统的库进行读写,结果发现对方采用的是oracle的us7ascii编码,我们系统默认采用的是ZHS16GBK,导致我们客户端读取和写入对方库的数据都是乱码,搜索网上,发现需要采用独立的oracle驱动去处理,最后采用Devart驱动,可以指定字符集编码

添加引用2个DLL:

数据库操作代码如下:(查询)

using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;using Devart.Data.Oracle;namespace WindowsOrcleDevart
{/// <summary>/// 使用OracleDevart驱动/// </summary>public class ProviderDevart{private OracleConnection dbConnection;private OracleTransaction dbTransaction;private string _strConn = "";private string path = AppDomain.CurrentDomain.BaseDirectory + "logs\\调用数据库";public string Err = "";public string StrConn { get => _strConn; set => _strConn = value; }public int BeginTransaction(){//this.Err = "";int result = -1;try{GetSingerConnection();this.dbTransaction = this.dbConnection.BeginTransaction();result = 1;}catch (Exception message){this.dbTransaction.Dispose();this.dbTransaction = null;Err = "开始事务异常," + message.Message;WriteLog(path, Err);}return result;}// 定义一个静态变量来保存类的实例private static ProviderDevart s_instance;/// <summary>/// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点/// </summary>/// <returns></returns>public static ProviderDevart Instance{ // 当第一个线程运行到这里时,此时会对locker对象 "加锁",// 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁// lock语句运行完之后(即线程运行完之后)会对该对象"解锁"// 双重锁定只需要一句判断就可以了get{if (s_instance == null){lock (locker){if (s_instance == null){s_instance = new ProviderDevart();}}}return s_instance;}}#region 单例锁  定义一个标识确保线程同步private static readonly object locker = new object();#endregionprivate void GetSingerConnection(){if (this.dbConnection != null){if (dbConnection.State != ConnectionState.Open){dbConnection.Open();}}else{this.dbConnection = new OracleConnection(_strConn);this.dbConnection.Open();}}public int TransactionCommit(){//this.Err = "";int result = -1;try{GetSingerConnection();if (this.dbTransaction != null){this.dbTransaction.Commit();this.dbTransaction.Dispose();this.dbTransaction = null;}result = 1;}catch (Exception message){if (this.dbTransaction != null){this.dbTransaction.Dispose();this.dbTransaction = null;}Err = "提交事务异常," + message.Message;WriteLog(path, Err);}return result;}public int TransactionRollBack(){//this.Err = "";int result = -1;try{GetSingerConnection();if (this.dbTransaction != null){this.dbTransaction.Rollback();this.dbTransaction.Dispose();this.dbTransaction = null;}result = 1;}catch (Exception message){if (this.dbTransaction != null){this.dbTransaction.Dispose();this.dbTransaction = null;}Err = "回滚事务异常," + message.Message;WriteLog(path, Err);}return result;}/// <summary>/// 插入/更新/删除表数据/// </summary>/// <param name="strSql"></param>/// <returns>返回SQL执行的影响行数,返回-1表示出现了内部错误</returns>public int ExecuteNonQuery(string strSql){//this.Err = "";OracleGlobalization applicationInfo = OracleGlobalization.GetApplicationInfo();applicationInfo.ClientCharacterSet = "us7ascii";OracleGlobalization.SetApplicationInfo(applicationInfo);int result = -1;try{GetSingerConnection();WriteLog(path, " 开始");WriteLog(path, "strConn:" + _strConn);WriteLog(path, "strSql:" + strSql);if (_strConn == "" || strSql == ""){Err = "strConn 或 strSql 为空,无法执行!";}else{OracleCommand cmd = dbConnection.CreateCommand();if (this.dbTransaction != null){cmd.Transaction = this.dbTransaction;}cmd.CommandText = strSql;result = cmd.ExecuteNonQuery();}}catch (Exception ex){Err = "插入更新数据异常," + ex.Message;WriteLog(path, Err);}WriteLog(path, " 结束");return result;}/// <summary>/// 查询表数据/// </summary>/// <param name="strSql">SQL语句</param>/// <param name="data">返回数据为DataTable</param>/// <returns></returns>public int FillDataTable(string strSql, out DataTable data){//this.Err = "";data = new DataTable();OracleGlobalization applicationInfo = OracleGlobalization.GetApplicationInfo();applicationInfo.ClientCharacterSet = "us7ascii";OracleGlobalization.SetApplicationInfo(applicationInfo);int result = -1;OracleCommand oleDbCommand = null;try{GetSingerConnection();WriteLog(path, " 开始");WriteLog(path, "strConn:" + _strConn);WriteLog(path, "strSql:" + strSql);oleDbCommand = new OracleCommand(strSql, dbConnection);oleDbCommand.CommandType = CommandType.Text;using (OracleDataAdapter oleDbDataAdapter = new OracleDataAdapter(oleDbCommand)){DataSet ds = new DataSet();oleDbDataAdapter.Fill(ds, "ReturnTable");if (ds != null && ds.Tables.Count > 0){data = ds.Tables[0];}}result = 1;}catch (Exception ex){Err = "查询数据异常," + ex.Message;WriteLog(path, Err);}WriteLog(path, " 结束");return result;}private bool dbClose(OracleConnection conn, OracleCommand cmd, OracleTransaction tran){bool result;if (cmd != null){cmd.Dispose();GC.Collect();result = false;}else if (conn != null){if (conn.State == ConnectionState.Open){conn.Close();}conn.Dispose();GC.Collect();result = true;}else{GC.Collect();result = false;}return result;}public void WriteLog(string filePath, string message){try{if (!Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}string fileName = filePath + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";string msg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:") + DateTime.Now.Millisecond + "  " + message;System.IO.StreamWriter sw = System.IO.File.AppendText(fileName);sw.WriteLine(msg);sw.Close();}catch{}}}
}

客户端访问示例:

private void button1_Click(object sender, EventArgs e)
{ProviderDevart providerDevart = ProviderDevart.Instance;providerDevart.StrConn = "data source=XXX.XX.8.X:1521/orcl;user id=#####;password=######;";providerDevart.FillDataTable("SELECT '测试数据' as T1 FROM DUAL  ",out DataTable dt);MessageBox.Show(dt.Rows[0]["T1"].ToString());
}

源码,压缩包见地址:

c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题资源-CSDN文库

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GPTs分享】GPTs分享之Write For Me

Write For Me 是一个专门定制的GPT版本&#xff0c;旨在为用户提供高质量的文本内容创作服务。它适用于各种写作需求&#xff0c;从商业计划、学术文章到创意故事等。下面是从简介、主要功能、使用案例、优点和局限性几个方面对Write For Me 的详细介绍。 简介 Write For Me …

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; …

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考&#xff1a;10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验&#xff0c;也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…

蜣螂优化算法DBO求解不闭合SD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

一、蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09; 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得…

YOLOv9-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

开源大语言模型作为 LangChain 智能体

概要 开源大型语言模型 (LLMs) 现已达到一种性能水平&#xff0c;使它们适合作为推动智能体工作流的推理引擎: Mixtral 甚至在我们的基准测试中 超过了 GPT-3.5&#xff0c;并且通过微调&#xff0c;其性能可以轻易的得到进一步增强。 引言 针对 因果语言建模 训练的大型语言模…

使用 npm/yarn 等命令的时候会,为什么会发生 Error: certificate has expired

缘起 昨天&#xff0c;我写了一篇文章&#xff0c;介绍如何使用项目模板&#xff0c;构建一个 Electron 项目的脚手架&#xff0c;我发现我自己在本地无法运行成功&#xff0c;出现了错误。 ✖ Failed to install modules: ["electron-forge/plugin-vite^7.2.0",&qu…

golang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

C# 通过共享内存调用C++ 算法

需求&#xff1a; C#程序调用 C开发的dll. 一种C# 程序调用c 算法方案_算法怎么被c#调用-CSDN博客 上回书说到&#xff0c;将c算法封装为dll 插件&#xff0c;c加载后&#xff0c;暴露C风格接口&#xff0c;然后供C#调用。但是这样有几个问题&#xff1a; 1&#xff0c;一是…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量&#xff1a; Mean: 高斯分布中的μ值&#xff08;平均值&#xff09; Sensit: sensitivity&#xff0c;也就是1个Sigma的值&#xff1b; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson 16 At the Shoe Store 在鞋店

《美语从头学初级入门篇》 注意&#xff1a;被 删除线 划掉的不一定不正确&#xff0c;只是不是标准答案。 文章目录 Lesson 16 At the Shoe Store 在鞋店对话A对话B笔记会话A会话B替换 Lesson 16 At the Shoe Store 在鞋店 对话A A: Do you have these shoes in size 8? B:…

备战蓝桥杯---树形DP基础1

我们先来看几个比较简单的例子来引入&#xff1a; 我们令f[i]表示以i为根节点的子树大小&#xff0c;易得状态转移方程为&#xff1a; f[i]1f[son1]....f[soni]; 我们用DFS即可&#xff0c;下面是大致的模板&#xff1a; 让我们来看看几道题吧&#xff1a; 1.贪心树形DPDFS&…

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 卷积神经网络-长短期记忆网络&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容…

【教程】 iOS混淆加固原理篇

目录 摘要 引言 正文 1. 加固的缘由 2. 编译过程 3. 加固类型 1) 字符串混淆 2) 类名、方法名混淆 3) 程序结构混淆加密 4) 反调试、反注入等一些主动保护策略 4. 逆向工具 5. OLLVM 6. IPA guard 7. 代码虚拟化 总结 摘要 本文介绍了iOS应用程序混淆加固的缘由…

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版&#xff0c;以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

https://htmlunit.sourceforge.io/

https://htmlunit.sourceforge.io/ 爬虫 HtmlUnit – Welcome to HtmlUnit HtmlUnit 3.11.0 API https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.70.0 https://s01.oss.sonatype.org/service/local/repositories/releases/content/org/htmlunit…

STM32--低功耗模式详解

一、PWR简介 正常模式与睡眠模式耗电是mA级&#xff0c;停机模式与待机模式是uA级。 二、电源框图 供电区域有三处&#xff0c;分别是模拟部分供电&#xff08;VDDA&#xff09;&#xff0c;数字部分供电&#xff0c;包括VDD供电区域和1.8V供电区域&#xff0c;后备供电&…

StarRocks之监控管理(内含DashBoard模板)

先看下最终效果图 架构 Prometheus 是一个拥有多维度数据模型的、灵活的查询语句的时序数据库。它可以通过 Pull 或 Push 采集被监控系统的监控项,存入自身的时序数据库中。并且通过丰富的多维数据查询语言,满足用户的不同需求。 Grafana 是一个开源的 Metric 分析及可视化系…

Oracle 基础表管理(Heap-Organized Table Management)

表是数据库中负责数据存储的对象&#xff0c;在RDBMS中&#xff0c;数据以行、列的形式存储在表中。Oracle中表有很多种类型&#xff0c;最基础且应用最常用的类型就是堆表&#xff08;Heap-Organized Table&#xff09;&#xff0c;本文列举了Oracle堆表的常用管理操作。 一、…

【GPTs分享】GPTs分享之consensus

大家好&#xff0c;元宵节快乐&#xff0c;今天给大家分享的GPTs是consensus。consensu号称无需关键字即可搜索2亿文章&#xff0c;而且给出的链接绝对保真&#xff0c;不再是胡编乱造的&#xff0c;而且能够根据指定主题辅助编写论文或者博客。 简介 consensus使用chat.cons…