WebConfig.ConnectionString中的相对路径引用

14

在web.config文件的connectionstring, attachDbFileName属性中,是否可以指定相对路径引用?

例如,如果我的数据库位于App_data文件夹中,我可以轻松地将AttachDBFilename指定为|DataDirectory|\mydb.mdf,而|Datadirectory|会自动解析为正确的路径。

现在,假设web.config文件位于A文件夹中,但数据库位于B\App_data文件夹中,其中A和B文件夹位于同一文件夹中。是否有办法使用相对路径引用来解析到正确的路径?

5个回答

15

我曾经遇到过以下情况:我想在我的集成测试中使用与应用程序相同的数据库。

我采取了以下解决方法:

在我的测试项目的App.config文件中,我添加了以下内容:

<appSettings>
  <add key="DataDirectory" value="..\..\..\BookShop\App_Data\"/>
</appSettings>
在测试设置中,我执行以下代码:
   var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];  
   var absoluteDataDirectory = Path.GetFullPath(dataDirectory);  
   AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);  

非常感谢您!!这帮了我很多! - Shiva Naru

10

这取决于你的 '|DataDirectory|' 位于哪里。如果 '|DataDirectory|' 的解析值在文件夹 A(也就是 web.config 所在的文件夹)中,那么不能指定一个不是 '|DataDirectory|' 解析值子文件夹的相对路径。

你可以通过调用 AppDomain.SetData 方法将 '|DataDirectory|' 的值设置为任何你想要的值。

从 MSDN 在线文档中得知:

使用 DataDirectory 时,结果文件路径不能高于由替换字符串指向的目录结构。例如,如果完全展开的 DataDirectory 是 C:\AppDirectory\app_data,则上述显示的示例连接字符串有效,因为它位于 c:\AppDirectory 下方。但是,尝试将 DataDirectory 指定为 |DataDirectory|..\data 将导致错误,因为 \data 不是 \AppDirectory 的子目录。

希望这可以帮助到你。


1

在测试方法中添加以下属性:

[DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")]
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)]

|DataDirectory|变量在测试运行时由系统定义。 DeploymentItem将电子表格复制到那里。 您指向电子表格和电子表格中数据来源的选项卡。 右键单击选项卡以将其重命名为易记的名称。


0
在IIS中,您还可以创建一个虚拟目录,指向实际数据库所在的位置。然后,您的连接字符串只需引用该虚拟目录即可。

0

Web.config

  <appSettings>
    <add key="FilePath" value="App_Data\SavedFiles\"/>
  </appSettings>

Path.cs

string filePath = AppDomain.CurrentDomain.BaseDirectory + (ConfigurationManager.AppSettings["FilePath"]);

对我来说没问题..!!


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