App.config 连接字符串相对路径

Posted

技术标签:

【中文标题】App.config 连接字符串相对路径【英文标题】:App.config connection string relative path 【发布时间】:2011-06-27 11:35:06 【问题描述】:

我需要在 app.config 中设置 sqlite 连接字符串。我想设置相对于调试/发布文件夹的路径,数据库文件将被复制到这些文件夹中。

<add name="EmailsSQLite" connectionString="data source=c:\Users\Test\Documents\Visual Studio 2008\Projects\TestConsole\Emails\data\EmailDatabase.sqlite" providerName="System.Data.SQLite"/>

我想要类似的东西:

<add name="EmailsSQLite" connectionString="data source=\data\EmailDatabase.sqlite" providerName="System.Data.SQLite"/>

这可能吗?

【问题讨论】:

试试这个:***.com/questions/1833640/… @jo_asakura 这不是重复的,因为该问题是关于 SQL Server CE 数据库,而不是 SQLite 数据库(我发布此评论,因为它刚刚出现在审查队列中以关闭为重复)。 【参考方案1】:

您可以按照 Lefty 的回答中所述指定相对路径。

但是这将是相对于当前工作目录的,它不一定是包含您的可执行文件的目录。

一种解决方法是在使用之前修改连接字符串,例如

在 app.config 中:

 connectionString="data source=AppDir\data\EmailDatabase.sqlite

在您的代码中:

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings[name];    
if (c == null)

    ... handle missing connection string ...

string fixedConnectionString = c.ConnectionString.Replace("AppDir", AppDomain.CurrentDomain.BaseDirectory);
... use fixedConnectionString

【讨论】:

唯一的限制是,如果您使用像 SubSonic 这样的自动加载框架(afaik - 希望我错了!),您无法轻松参数化连接字符串,因为您只提供连接设置名称(此时为只读);可惜你不能像在 web.config 中那样使用“~” 这个问题真的回答了这个问题吗?我有完全相同的问题,但它在我使用 EDMX 设计器时出现。它无法显示我的数据源(这是一个 SQLite 数据库),因为我的同事设置了它,并且它正在使用他的路径。 App.config 中我不能使用neither AppDir`,也不能使用%AppDir%。这只是在AppData\Local\JetBrains\Installations\ReSharperPlatformVs14 中创建具有完全相同名称的文件夹【参考方案2】:

是的,这是可能的。尝试使用 |DataDirectory|。

在 App.config 中

<add name="SqliteConnectionString" connectionString="Data Source=|DataDirectory|\Database.sqlite;" providerName="System.Data.SQLite"/>

此页面上的更多信息 https://msdn.microsoft.com/en-us/library/cc716756.aspx

【讨论】:

这是为您项目中的 SQLite 文件准备的?您可能必须将文件的 Build Action 设置为内容,以便将其复制到 debug/bin 或 release/bin 以使其正常工作【参考方案3】:

尝试使用“.”在字符串的数据源部分的第一个反斜杠之前。

例如。

data source=.\data\EmailDatabase.sqlite

【讨论】:

这仅在您使用相对路径(指向当前工作目录)之前显示任何文件打开/保存类型对话框切换 cwd 时才有效 - 假设它被设置为开始的可执行路径(可能不是这样) 如果 db 不存在,您将收到此错误:A file activation error occurred. The physical file name '.\Database.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors. 但在全路径方法中,它将为您创建 db。

以上是关于App.config 连接字符串相对路径的主要内容,如果未能解决你的问题,请参考以下文章

c# 连接字符串和连接app.config

App.config 连接字符串保护错误

加密 app.config 中的连接字符串

在运行时更改连接字符串并重新加载 app.config

在 app.config 中部署通过 RSAProtectedConfigurationProvider 加密的连接字符串

为 WinForms 应用程序加密 app.config 中的连接字符串