2008-09-24 78 views
14

是否可以在连接字符串中指定相对路径引用,在web.config中指定attachDbFileName属性?例如,在我的数据库位于App_data文件夹中,我可以轻松地指定AttachDBFilename为| DataDirectory | \ mydb.mdf和| Datadirectory |会自动解析到正确的路径。WebConfig.ConnectionString中的相对路径引用

现在,假设web.config文件位于A文件夹中,但数据库位于B \ App_data文件夹中,其中A和B文件夹位于同一文件夹中。无论如何要使用相对路径引用来解析正确的路径吗?

回答

10

这取决于你的'| DataDirectory |'位于。如果“| DataDirectory |”的解析值位于文件夹A(web.config所在的位置)中,则no - 您不能指定不是“| DataDirectory |”解析值的子文件夹的相对路径。

可以做的是设置'| DataDirectory |'的值通过调用AppDomain.SetData方法,将它放在任何你想要的位置。

从MSDN在线文档:

当使用DataDirectory目录,生成的文件路径不能在目录结构中高于由目录替换字符串指向。例如,如果完全展开的DataDirectory是C:\ AppDirectory \ app_data,那么上面显示的示例连接字符串将工作,因为它位于c:\ AppDirectory下方。但是,试图将DataDirectory指定为| DataDirectory | .. \ data将导致错误,因为\ data不是\ AppDirectory的子目录。

希望这会有所帮助。

0

在IIS中,您还可以创建一个虚拟目录,指向保存真实数据库的任何位置。然后你的连接字符串只是引用虚拟目录。

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); 
+0

非常感谢你!非常珍惜我! – 2017-04-15 23:02:03

1

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

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

变量|DataDirctory|在运行测试时由系统定义。 DeploymentItem将电子表格复制到那里。您指向电子表格和电子表格中数据来自的标签。右键单击该选项卡将其重命名为易于记忆的内容。