C#底层库--XML配置参数读写辅助类(推荐阅读)

news/2024/3/29 19:17:50/文章来源:https://blog.csdn.net/youcheng_ge/article/details/129175304

系列文章

C#底层库–记录日志帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709

C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

C#底层库–获取文件版本和MD5值
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

C#底层库–操作文件帮助类FileHelper(获取目录的所有文件)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887161

C#底层库–操作Excel帮助类(读取、导出表格)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887445

C#底层库–软件版本管理XML
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110195766

C#底层库–随机数生成类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126888812

C#底层库–正则表达式帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286

C#底层库–CSV和DataTable相互转换
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128804367

C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298

C#底层库–JSON帮助类_详细(序列化、反序列化、list、datatable)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805705

C#底层库–cookie操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816347

C#底层库–Session操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817096

C#底层库–数据实体类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298

C#底层库–数据库类型与程序类型转换类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610

C#底层库–日期扩展类(上周、本周、明年、前年等)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

文章目录

  • 系列文章
  • 前言
  • 一、底层库介绍
  • 二、底层库源码
  • 三、调用方法
    • 3.1 写参数
    • 3.2 读参数
  • 四、项目样例


前言

本专栏为【底层库】,主要介绍编程过程中 通用函数。我们将这些通用固化的源码,进行重写、封装、拓展,再进行单元测试、集成测试、beta测试,最终形成通用化模板,这里我们称为“底层库”。

作为研发人员的你,并不需要花大量时间,研究“底层库”的含义,及“底层库”的实现方法。你只需要几行调用代码,就可以解决项目上碰到的难题。而底层库使用方法,本专栏均有详细介绍,也有项目应用场景。

底层库已实现功能:MySQL脚本构建器、MySQL数据库访问操作、参数配置文件读写、加解密算法、日志记录、HTTP通信、Socket通信、API前后端交互、邮件发送、文件操作、配置参数存储、Excel导入导出、CSV和DataTable转换、压缩解压、自动编号、Session操作等。

本专栏会持续更新,不断优化【底层库】,大家有任何问题,可以私信我,如果你对本栏感兴趣,欢迎关注,我将带你用最简洁的代码实现复杂的功能。

一、底层库介绍

本文介绍XML配置文件读写,将程序开发中一些可调节变化的参数,以文件形式存储在程序目录中,用户可以自行配置调节,而不需要改动代码。是程序开发中使用频率最高的底层库,所以我强力推荐。

用途:可以实现 数据库连接参数、邮件服务器参数、软件功能参数、服务器连接参数等可以配置。

二、底层库源码

创建类AppConfig,复制以下代码。

using System;
using System.Xml;
using System.IO;namespace YS_Server
{/// <summary>/// 全局对象类/// 创建人:gyc/// 创建事件:2022-03-31/// 说明:负责存放配置信息,Server.config。/// 使用过程中遇到任何错误,联系作者修改https://blog.csdn.net/youcheng_ge。/// </summary>public static class AppConfig{static string InitContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<configuration><appSettings></appSettings></configuration>";/// <summary>/// 获取Config目录下AppSettings.config中设置的值/// </summary>/// <param name="key">键名</param>/// <returns>返回设置值</returns>public static string GetValue(string key){string configFile = AppDomain.CurrentDomain.BaseDirectory + "Server.config";if (!File.Exists(configFile)){File.WriteAllText(configFile, InitContent);}try{XmlDocument doc = new XmlDocument();doc.Load(configFile);string path = "//add [@key=\"" + key + "\"]/@value";XmlNode e = doc.SelectSingleNode(path);return e.Value;}catch{//throw new Exception("配置文件" + configFile + "中未找到配置项:" + key + ",或者配置项不正确!");return "";}}public static string GetValueByPath(string key, string a_strFlPath){string configFile = a_strFlPath;if (!File.Exists(configFile)){//				throw new Exception("在目录下未找到配置文件Server.config!");return "";}try{XmlDocument doc = new XmlDocument();doc.Load(configFile);string path = "//add [@key=\"" + key + "\"]/@value";XmlNode e = doc.SelectSingleNode(path);return e.Value;}catch{//throw new Exception("配置文件" + configFile + "中未找到配置项:" + key + ",或者配置项不正确!");return "";}}public static void SetValue(string key, object value){string configFile = AppDomain.CurrentDomain.BaseDirectory + "Server.config";XmlDocument doc = new XmlDocument();XmlElement l_xSetting;if (File.Exists(configFile)){doc.Load(configFile);XmlElement l_root = doc.DocumentElement;l_xSetting = l_root.FirstChild as XmlElement;}else{doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", ""));doc.AppendChild(doc.CreateElement("configuration"));XmlElement l_root = doc.DocumentElement;l_xSetting = doc.CreateElement("appSettings");l_root.AppendChild(l_xSetting);}try{string path = "//add [@key=\"" + key + "\"]";XmlNode e = doc.SelectSingleNode(path);if (e == null){XmlElement l_key = doc.CreateElement("add");l_key.SetAttribute("key", key);l_key.SetAttribute("value", value.ToString());l_xSetting.AppendChild(l_key);}else{XmlElement l_key = e as XmlElement;l_key.SetAttribute("key", key);l_key.SetAttribute("value", value.ToString());}}finally{doc.Save(configFile);}}/// <summary>/// 获取Config目录下AppSettings.config中设置的值/// </summary>/// <param name="key">键名</param>/// <param name="valueDefault">默认值</param>/// <returns>返回设置值,如果没有设置则返回默认值</returns>public static string GetValue(string key, string valueDefault){string result = "";try{result = AppConfig.GetValue(key);}catch{}if (result == "")return valueDefault;elsereturn result;}}
}

三、调用方法

调用方法是很简单的,分为两部分,写参数 和 读参数

3.1 写参数

写参数,这是我以前项目用的,写 自动邮件发送参数、自动关机参数等。

   //写入配置文件AppConfig.SetValue("res_path", this.BTN_ResPath.Text);//AppConfig.SetValue("auto_run", this.checkBox_AutoRun.Checked ? "T" : "F");//AppConfig.SetValue("shutdown_tag", this.RB_ShutDownYes.Checked ? "T" : "F");//AppConfig.SetValue("shutdown_time", this.tp_ShutDownTime.Value);AppConfig.SetValue("max_runtime", this.NUD_MaxRunTime.Value);AppConfig.SetValue("fullscreen_time", this.NUD_FullScreenTime.Value);AppConfig.SetValue("exit_time", this.NUD_ExitTime.Value);AppConfig.SetValue("mail_server", this.txt_MailServer.Text);AppConfig.SetValue("mail_send", this.txt_MailSend.Text);AppConfig.SetValue("mail_password", this.txt_MailPwd.Text);AppConfig.SetValue("mail_receive", this.txt_MailReceive.Text);AppConfig.SetValue("send_time", this.tp_SendTime.Value);string l_strMedia = AppDomain.CurrentDomain.BaseDirectory + Const.ct_strPlayerName;AppConfig.SetValue("media_path", l_strMedia);AppConfig.SetValue("timer_interval", 5000);

3.2 读参数

读取数据库连接参数:ip地址、端口号、数据库名、用户名、密码。

    /// <summary>/// 构造函数/// </summary>public MySQLHelper(){this.server = AppConfig.GetValue("db_server");this.port = AppConfig.GetValue("db_port");this.BaseName = AppConfig.GetValue("db_base");this.uid = AppConfig.GetValue("db_uid");this.pwd = AppConfig.GetValue("db_pwd");//MySQL.Data 8.0.28.0//this.connectionString = $"server={server};port={port};user id={uid};password={pwd};database={BaseName};pooling=true;ConnectionTimeout=1800;CharSet=utf8";//MySQL.Data 8.0.26.0this.connectionString = $"server={server};port={port};uid={uid};pwd={pwd};database={BaseName};SslMode=None;Charset=utf8";}

四、项目样例

用于数据库连接串配置,我的所有文章,均使用本底层库,将数据库连接参数可配置化。相关文章如下:

C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

C#底层库–数据库类型与程序类型转换类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610

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

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

相关文章

2023新的一年软件测试还值得学习吗?

最近因为疫情等各种原因&#xff0c;大厂裁员&#xff0c;失业等等频频受到关注。不解释&#xff0c;确实存在&#xff0c;各行各业都很难&#xff0c;但是&#xff0c;说软件测试行业不吃香&#xff0c;我还真不认同&#xff08;不是为培训机构说好话&#xff0c;大环境不好&a…

Odoo丨Odoo框架源码研读三:异常处理与定制化开发

Odoo丨Odoo框架源码研读三&#xff1a;异常处理与定制化开发 Odoo源码研读的第三期内容&#xff1a;异常处理与定制化开发。 *异常处理* Odoo中的Exception是对Python内置异常做了继承和封装&#xff0c;设定了自己核心的几个Exception。 而对异常的处理和Python内置异常的…

Spring 之bean的生命周期

文章目录IOCBean的生命周期运行结果实例演示实体类实例化前后置代码初始化的前后置代码application.xml总结今天我们来聊一下Spring Bean的生命周期&#xff0c;这是一个非常重要的问题&#xff0c;Spring Bean的生命周期也是比较复杂的。IOC IOC&#xff0c;控制反转概念需要…

Flutter+【三棵树】

定义 在Flutter中和Widgets一起协同工作的还有另外两个伙伴&#xff1a;Elements和RenderObjects&#xff1b;由于它们都是有着树形结构&#xff0c;所以经常会称它们为三棵树。 这三棵树分别是&#xff1a;Widget、Element、RenderObject Widget树&#xff1a;寄存烘托内容…

SigmaPlot科学绘图工具:ROC曲线分析及AUC组间差异的显著性分析

目的 初步使用SigmaPlot科学绘图工具&#xff1b;进行ROC曲线绘制并分析检验变量AUC组间差异性是否显著 软件下载及安装 SigmaPlot下载安装按照这个教程即可&#xff1a;https://www.hhkxxw.com/24799.html 快速通道&#xff1a;SigmaPlot下载链接&#xff1a;百度网盘链接…

DC220V冲击继电器RCJ-3

系列型号 RCJ-2型冲击继电器&#xff1b; RCJ-2/48VDC冲击继电器 RCJ-2/110VDC冲击继电器 RCJ-2/220VDC冲击继电器 RCJ-2/100VAC冲击继电器 RCJ-2/127VAC冲击继电器 RCJ-2/220VAC冲击继电器 RCJ-3/220VAC冲击继电器 RCJ-3型冲击继电器 RCJ-3/127VAC冲击继电器 RCJ-3/100VAC冲…

FastCGI sent in stderr: "PHP message: PHP Fatal error

服务器php7.2卸载安装7.4之后,打开网站一直无法访问,查看nginx错误日志发现一直报这个错误:2023/02/23 11:12:55 [error] 4735#0: *21 FastCGI sent in stderr: &#xff02;PHP message: PHP Fatal error: Uncaught ReflectionException: Class translator does not exist in …

Python四大主题之一【 Web】 编程框架

目前Python的网络编程框架已经多达几十个&#xff0c;逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处&#xff0c;本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架&#xff1a;Django、Tornado、Flask、Twisted。 …

100%BIM学员的疑惑:不会CAD可以学Revit吗?

在新一轮科技创新和产业变革中&#xff0c;信息化与建筑业的融合发展已成为建筑业发展的方向&#xff0c;将对建筑业发展带来战略性和全局性的影响。 建筑业是传统产业&#xff0c;推动建筑业科技创新&#xff0c;加快推进信息化发展&#xff0c;激发创新活力&#xff0c;培育…

web客户端-websocket

1、websocket简介 WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c…

python3.11.2安装 + pycharm安装

下载 &#xff1a;https://www.python.org/ 2.双击下载的软件&#xff1a; 3.进入安装界面 下一步&#xff0c;点击 是 上一步点击后就看到如下&#xff1a; 安装成功了&#xff0c;接下来检测一下&#xff1a;cmd 安装pycharm PyCharm是一种Python IDE&#xff08;Integr…

Apifox-比postman更优秀的接口自动化测试平台

一、Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter。通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好 API 文档&#xff0c;API 调试、API 数据 Mock、A…

你真的需要文档管理软件吗?

什么是文档管理软件&#xff1f; 文档管理软件 (DMS) 是一种数字解决方案&#xff0c;可帮助组织处理、捕获、存储、管理和跟踪文档。 通过严格管理您的关键业务信息&#xff0c;您可以开发以稳定、可预测、可衡量的方式启动、执行和完成的流程。 如果没有功能齐全的文档管理软…

从事Python自动化测试,30岁熬到月薪20K+,分享我的多年面试经…

年少不懂面试经&#xff0c;读懂已是测试人。 大家好&#xff0c;我是小码哥&#xff0c;一名历经沧桑&#xff0c;看透互联网行业百态的测试从业者&#xff0c;经过数年的勤学苦练&#xff0c;精钻深研究&#xff0c;终于从初出茅庐的职场新手成长为现在的测试老鸟&#xff0…

zabbix4.0安装部署

目录 1.1、添加 Zabbix 软件仓库 1.2、安装 Server/proxy/前端 1.3、创建数据库 1.4、导入数据 1.5、为 Zabbix server/proxy 配置数据库 1.6、 启动 Zabbix server 进程 1.7、zabbix前端配置 SELinux 配置 1.8、安装 Agent 1.9、启动zabbix 2.0、访问zabbix 1.1、添加…

ThinkPHP ^6图片操作进阶

图片裁剪、缩略、水印不再是TP框架系统内置的功能&#xff0c;需要安装。 目录 安装 图片处理 1.创建图片对象 2.获取图片属性 3.裁剪图像 4.生成缩略图 6.保存图像 7.水印 安装 使用composer在项目根目录打开命令行执行&#xff1a; composer require topthink/think…

mybatis-plus分页方式

拦截器(分页插件) 一 方式1&#xff1a;XxxMapper.selectPage 1 selectPage(page, null) 概述 MyBatisPlus中提供的&#xff08;自带的&#xff09;分页插件&#xff0c;非常简单&#xff0c;只需要简单的配置就可以实现分页功能。详细步骤&#xff1a; 第一步&#xff1a;&…

【Tips】通过背数据了解业务

学习资料&#xff1a;做了三年数据分析&#xff0c;给你的几点建议 1. 通过背数据了解业务 原文&#xff1a; 总结&#xff1a; 方法&#xff1a;每天早上去到公司第一件事情就是先背一遍最新的各种指标。原理&#xff1a; 数据敏感性就是建立在对数据的了解和熟悉上。业务的…

一文带你了解排序算法

排序算法平均时间复杂度冒泡排序O(n2)选择排序O(n2)插入排序O(n2)希尔排序O(n1.5)快速排序O(N*logN)归并排序O(N*logN)堆排序O(N*logN)基数排序O(d(nr)) 一. 冒泡排序(BubbleSort) 1、基本思想&#xff1a;两个数比较大小&#xff0c;较大的数下沉&#xff0c;较小的数冒起来。…

Spring boot开启定时任务的三种方式(内含源代码+sql文件)

Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09; 源代码sql文件下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87486580 目录Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09;源代码…