C#连接字符串和拼接App.config文件

3
我有以下连接字符串,通过它我连接到位于应用程序根目录内的子文件夹中的Access数据库(.mdb):
 OleDbConnection con = new OledbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.AppDomain.CurrentDomain.BaseDirectory() + "Data\rctts.mdb;Jet OLEDB:Database Password=mypassword;")

我的问题是,如何将连接字符串放在app.config文件中?通常我会使用:

 <connectionStrings>
    <add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

我面临的问题是,在我的连接字符串中,我正在做一些拼接,并使用System.AppDomain.CurrentDomain.BaseDirectory()来设置Data Source… 如何在app.config中进行相同的拼接?是否可以这样做?

那看起来像是 VB.Net 的连接符,不是 C#。 - juharr
@juharr,现在看起来像C#了 :) - Aousaf Rashid
2个回答

3

虽然配置API没有为您操作连接字符串提供任何设施,但是您可以将连接字符串“模板”放入配置中,并使用string.Format在代码中进行其余操作:

配置:

<connectionStrings>
    <add name="Test" connectionString="Data Source={0}Data\rctts.mdb;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

C# 代码:

string conStr = string.Format(
    ConfigurationManager.ConnectionStrings["Test"].ConnectionString
,   System.AppDomain.CurrentDomain.BaseDirectory()
);

我收到了一个警告:在将“ConnectionStringSetting”转换为“IFormatProvider”时可能会发生运行时错误,我应该担心吗? - Aousaf Rashid
@zackraiyan 没错 - 我忘记添加 .ConnectionString 了。这就是当我不尝试在本地编译东西时会发生的事情。谢谢! - Sergey Kalinichenko

3
你可以尝试以下方法:
connectionString="Data Source=|DataDirectory|\rctts.mdb;Initial Catalog=OmidPayamak;Integrated Security=True"

然后尝试将DataDirectory的值设置为以下内容:

var currentDomain = AppDomain.CurrentDomain;
var basePath = currentDomain.BaseDirectory;
currentDomain.SetData("DataDirectory", basePath+"\Data");

在您的应用程序相应的启动文件中。

@zackraiyan 没错!它是可以通过AppDomain设置的变量。请查看此链接 https://blogs.msdn.microsoft.com/smartclientdata/2005/08/26/working-with-local-databases/。 - Christos
@zackraiyan,您能分享一下出现错误的那一行代码吗? - Christos
让我们在聊天中继续这个讨论 - Christos
不好意思问一下,我在你的代码中没有看到连接字符串的“name”有任何用处?这正常吗? - Aousaf Rashid
1
@Christos,已了解。 - Aousaf Rashid
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接