AttachDBFilenamex相对路径问题

<add name="employeeManagerConnectionString" connectionString="Data Source=.\SQLExpress;Integrated Security=true;
User Instance=true;
AttachDBFilename=|DataDirectory|\employeeManager.mdf;
Initial Catalog=employeeManager;" providerName="System.Data.SqlClient" />

 

 

webconfig中的数据库连接是不支持Server.MapPath的,一般我们只能写上数据库文件的物理路径,这给网站迁移带来很大的不方便。今天在网上找到了一个解决办法,与大家分享下。看以下代码:
 
技术分享<connectionStrings>
技术分享<add name="ConnStr_Access"
技术分享     providerName="System.Data.OleDb"
技术分享     connectionString=
技术分享     "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\cms.mdb;"
技术分享    />
技术分享</connectionStrings>


|DataDirectory|会被自动解析到App_Data

下面是MSDN的说明:

 

使用 DataDirectory 替代字符串

AttachDbFileName 已在 ADO.NET 2.0 中进行了扩展,引入了 |DataDirectory|(包含在管道符号中)替代字符串。DataDirectory 与 AttachDbFileName 结合使用可指示数据文件的相对路径,允许开发人员创建基于数据库源的相对路径(而无需指定完整路径)的连接字符串。

DataDirectory 点的物理位置取决于应用程序的类型。 在此示例中,要附加的 Northwind.mdf 文件位于应用程序的 \app_data 文件夹中。

技术分享Data Source=.\\SQLExpress;Integrated Security=true;
技术分享User Instance=true;
技术分享AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;
技术分享Initial Catalog=Northwind;

使用 DataDirectory 时,目录结构中的结果文件的路径不能高于替代字符串指向的目录。 例如,如果完全展开的 DataDirectory 为 C:\AppDirectory\app_data,则上面显示的示例连接字符串有效,因为它在 c:\AppDirectory 之下。 但是,如果尝试将 DataDirectory 指定为 |DataDirectory|\..\data,将会产生一个错误,因为 \data 不是 \AppDirectory 的子目录。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。