操作App.config与Web.config文件 [ZT]

本文介绍如何使用.NET 2.0及以上版本对应用程序配置文件进行动态读取与修改的方法,包括获取AppSettings和ConnectionStrings配置节的值,以及如何保存这些配置项的更新。

对于动态操作配置文件我想大家都不陌生,以前都是用的操作xml的方式,在.net2.0以上版本我可以利用新的方法来实现

自己对自己的配置:

public class ConfigureAppConfig
    
{
        
//静态构造,不能实例化
        static ConfigureAppConfig() { }

        
/**//// <summary>
        
/// 获取AppSettings配置节中的Key值
        
/// </summary>
        
/// <param name="keyName">Key's name</param>
        
/// <returns>Key's value</returns>

        public static string GetAppSettingsKeyValue(string keyName)
        
{
            
return ConfigurationManager.AppSettings.Get(keyName);
        }


        
/**//// <summary>
        
/// 获取ConnectionStrings配置节中的值
        
/// </summary>
        
/// <returns></returns>

        public static string GetConnectionStringsElementValue()
        
{
            ConnectionStringSettings settings 
= System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"];
            
return settings.ConnectionString;
        }


        
/**//// <summary>
        
/// 保存节点中ConnectionStrings的子节点配置项的值
        
/// </summary>
        
/// <param name="elementValue"></param>

        public static void ConnectionStringsSave(string ConnectionStringsName, string elementValue)
        
{
            System.Configuration.Configuration config 
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            config.ConnectionStrings.ConnectionStrings[
"connectionString"].ConnectionString = elementValue;
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection(
"connectionStrings");
        }


        
/**//// <summary>
        
/// 判断appSettings中是否有此项
        
/// </summary>

        private static bool AppSettingsKeyExists(string strKey, Configuration config)
        
{
            
foreach (string str in config.AppSettings.Settings.AllKeys)
            
{
                
if (str == strKey)
                
{
                    
return true;
                }

            }

            
return false;
        }


        
/**//// <summary>
        
/// 保存appSettings中某key的value值
        
/// </summary>
        
/// <param name="strKey">key's name</param>
        
/// <param name="newValue">value</param>

        public static void AppSettingsSave(string strKey, string newValue)
        
{
            System.Configuration.Configuration config 
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            
if (AppSettingsKeyExists(strKey, config))
            
{
                config.AppSettings.Settings[strKey].Value 
= newValue;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection(
"appSettings");
            }

        }

    }

如果你的程序是对其它程序的配置文件进行操作,代码如下:
            ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
            filemap.ExeConfigFilename 
= filePath;//配置文件路径
            config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);

            
if (AppSettingsKeyExists("Refresh", config))
            
{
                config.AppSettings.Settings[
"Refresh"].Value = M_TimeRead.ToString();
            }


            
if (AppSettingsKeyExists("MachineNo", config))
            
{
                config.AppSettings.Settings[
"MachineNo"].Value = M_MachineNo;

            }

            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection(
"appSettings");

            config.ConnectionStrings.ConnectionStrings[
"connectionString"].ConnectionString = M_ConnectionString;
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection(
"connectionStrings");

数据库字符串加密
ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
            filemap.ExeConfigFilename 
= Application.ExecutablePath + ".Config"//filePath;
            config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
            
//指定我所要的节点
            ConfigurationSection section = config.ConnectionStrings;

            
if ((section.SectionInformation.IsProtected == false&& (section.ElementInformation.IsLocked == false))
            
{
                
//制定节点加密
                section.SectionInformation.ProtectSection(protect);
                
//即使没有修改也保存设置
                section.SectionInformation.ForceSave = true;
                
//配置文件内容保存到xml
                config.Save(ConfigurationSaveMode.Full);
            }

转载于:https://www.cnblogs.com/guodapeng/archive/2008/02/26/1081589.html

# -*- coding: utf-8 -*- """ @file: async_zt_flow_hcproblem @author: zhangxiukun @date: 2025/7/17 10:14 """ from tortoise import run_async from datetime import date from app.models.zentao import ZtSdBookDetailRf from app.settings import TORTOISE_ORM from app.utils.db import MySqlClient async def get_processed_standingbookdetail(): """ 读取zt_standingbookdetail表数据并生成转换记录 """ processed_data = [] config_record = {} sql = "SELECT * FROM zt_standingbookdetail" async with MySqlClient(TORTOISE_ORM) as client: rows = await client.execute_query(sql) for row in rows: # 创建更新后的记录 new_row = { 'zt_id': row['id'], # 保存原ID到zt_id字段 'project_no': row['projectno'], 'software_category': row['softwarecategory'], # 固定类别 'software_item_umber': row['softwareitemnumber'], 'baseline_name': row['baselinename'], 'work_order_no': row['workorderno'], 'upgrade_status': row['upgradestatus'], 'upgrade_date': row['upgradedate'] if isinstance(row['upgradedate'], date) else None, 'upgrader': row['upgrader'], 'first_licensed_date': row['firstlicenseddate'] if isinstance(row['firstlicenseddate'], date) else None } print(new_row['software_category']) # 生成lowerconfig记录 if row['configname'] != '': config_record = new_row config_record['software_category'] =new_row['software_category']+'config' config_record['baseline_name']=row['configname'] config_record['software_item_umber']=row['confignumber'] processed_data.append(new_row) if config_record: processed_data.append(config_record) print(processed_data) return processed_data async def insert_zt_standingbookdetail(): """ 将转换后的数据插入到新表 """ data = await get_processed_standingbookdetail() # 使用 Tortoise ORM 批量创建 batch_size = 1000 total_inserted = 0 for i in range(0, len(data), batch_size): batch = data[i:i + batch_size] try: await ZtSdBookDetailRf.bulk_create( [ZtSdBookDetailRf(**item) for item in batch], ignore_conflicts=True # 忽略冲突(如果存在唯一约束) ) total_inserted += len(batch) except Exception as e: print(f"插入数据时发生错误: {e}") raise e print(f"成功插入 {total_inserted} 条记录到 zt_sdbookdetailrf 表中。") if __name__ == '__main__': run_async(insert_zt_standingbookdetail()) 转换完1000条就开始插入,使用多线程
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值