You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将应用设置项(数据库连接字符串)持久化至exe.config文件?

解决连接字符串重启后恢复默认值的问题

你遇到的核心问题是对.NET设置机制的范围配置理解偏差,下面给你分两种场景提供解决方案:

一、最推荐的方案:调整设置范围为User

默认情况下如果你的MMABooksConnectionString是Application范围的设置,这个值属于只读属性,My.Settings.Save()只会在当前进程内存中生效,不会修改程序目录下的CustomerMaintenanceDB.exe.config,重启后自然会恢复默认值。

解决步骤:

  • 右键你的项目 → 选择「属性」→ 切换到「设置」标签页
  • 找到MMABooksConnectionString项,把「范围」从Application修改为User
  • 保存设置后,你原来的代码就能正常工作:
    If ValidateStringConnection() Then
        My.Settings.MMABooksConnectionString = stNewStringConnection
        My.Settings.Save()
        txtCurrentConnection.Text = My.Settings.MMABooksConnectionString
    End If
    

修改范围后,Save()会把连接字符串保存到用户专属配置文件(路径通常是C:\Users\[用户名]\AppData\Local\[项目相关目录]\user.config),重启应用时会优先读取这个用户自定义的值,而非项目默认的exe.config内容。

二、不推荐方案:直接修改程序目录下的exe.config

如果你一定要修改程序目录里的CustomerMaintenanceDB.exe.config(不建议,因为普通用户可能没有该目录的写入权限,比如Program Files下的程序),可以通过ConfigurationManager手动操作配置文件:

Imports System.Configuration

' 直接打开程序根目录的配置文件
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
' 获取连接字符串节点
Dim connStringsSection As ConnectionStringsSection = config.ConnectionStrings

' 修改目标连接字符串
If connStringsSection.ConnectionStrings("MMABooksConnectionString") IsNot Nothing Then
    connStringsSection.ConnectionStrings("MMABooksConnectionString").ConnectionString = stNewStringConnection
    ' 保存修改
    config.Save(ConfigurationSaveMode.Modified)
    ' 刷新配置让当前应用立即生效
    ConfigurationManager.RefreshSection("connectionStrings")
    txtCurrentConnection.Text = stNewStringConnection
End If

⚠️ 注意:这种方式需要应用拥有程序目录的写入权限,部署时可能需要调整文件夹权限,或者要求用户以管理员身份运行应用,否则会抛出权限异常。

补充说明:为什么原代码无效?

  • Application范围的设置是编译时确定的,存储在exe.config中,属于只读属性,My.Settings.Save()不会修改这个文件
  • User范围的设置是针对每个用户的个性化配置,会保存到用户的AppData目录,重启应用时会自动加载这个自定义值

内容的提问来源于stack exchange,提问作者Antony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:00:38