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

C# WinForm如何读取文本路径动态配置app.config数据库连接串

问题背景

在Visual Studio环境下使用C#开发基于Windows Form的数据库应用程序,需求如下:

  • 程序首次运行时,由用户自主选择数据库文件所在文件夹
  • 所选文件夹路径存储在文本文件中
  • app.config配置文件可读取该文本文件内容,获取数据库实际存储位置

初始app.config配置代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>    
    <add name="MyProgram.Properties.Settings.DataBaseTestingConnectionString"
      connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\MyProgram\DataBaseTesting.accdb"
      providerName="System.Data.OleDb" />       
    <add name="cn" connectionString="data source=.;initial catalog=NORTHWIND;user id=sa" 
         providerName="System.Data.OleDb"  />    
  </connectionStrings>
</configuration>

需要实现:将连接字符串中Data Source属性对应的固定硬编码路径E:\MyProgram\DataBaseTesting.accdb,替换为读取桌面location.txt文件第一行存储的动态数据库路径。

验证可用的实现方案(2022年6月17日更新)

无需运行时动态修改app.config文件,通过ADO.NET内置的|DataDirectory|路径占位符即可实现,步骤如下:

  1. 修改App.config中的连接字符串配置
    将原有写死的Data Source固定路径,替换为|DataDirectory|占位符,修改后对应连接字符串配置为:
<add name="MyProgram.Properties.Settings.DataBaseTestingConnectionString"
  connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DataBaseTesting.accdb"
  providerName="System.Data.OleDb" />

其余配置项保持不变即可。

  1. 在C#业务代码中动态赋值DataDirectory路径
    在程序启动逻辑中,先完成路径读取/选择逻辑:
  • 若桌面存在location.txt文件,直接读取文件第一行内容作为数据库文件夹路径,赋值给全局变量Global.path
  • 若为首次运行无该文件,弹出文件夹选择对话框让用户指定数据库所在目录,将选中的路径写入桌面location.txt持久化存储,同时赋值给Global.path

在第一次实例化数据库连接对象之前,执行如下配置语句:

AppDomain.CurrentDomain.SetData("DataDirectory", Global.path);

注意:该语句的执行顺序必须早于任何数据库连接创建操作,否则|DataDirectory|占位符会默认解析为程序运行目录,导致路径匹配失败。

该方案不需要修改配置文件的写入权限,也不需要手动拼接完整连接字符串,运行时ADO.NET会自动将连接字符串中的|DataDirectory|替换为设置的自定义路径,稳定性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:31:02