这是ASP.NET 2.0提供的一个”Magic Value“(是DataDirectory宏)。可以在应用程序配置文件中,数据库连接串部分使用它,例如
<connectionStrings>
<add name="ConnectionString" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
注意:在使用ASP.NET时,可以任意使用这个MagicValue,但是,WinForm程序是不支持的。
在WinForm程序中,可以手工建立此种支持。
首先,装备好App_Data文件夹;
其次,使用的时候记得:自己加上“App_Data\”,因为Winform中把|DataDirectory|翻译成了程序启动目录apppath\bin\debug(或release),后面不带App_Data!
接下来的问题是:每次运行时,.NET会知道那个复制一份数据库文件到运行目录,致使新增/删除等操作不会及时反映到设计时代码中。
可以在“项目属性”中设置“数据库属性”-》“复制到输出目录”为“不复制”或 将使用的数据库链接到App_Data下的数据库。
还有一种比较好的做法:在程序启动时,设置AppDomain.CurrentDomain.SetData(“DataDirectory”,我的目录字符串),指导思想就是去掉【调试期】和【生产期】的差别。
string p = AppDomain.CurrentDomain.BaseDirectory;
if (p.IndexOf("\\bin\\") > 0)
{
if (p.EndsWith(\\bin\\Debug\\))
p = p.Replace("\\bin\\Debug", "");
if (p.EndsWith(\\bin\\Release\\))
p = p.Replace("\\bin\\Release", "");
} if (!p.EndsWith("App_Data\\")) p = p + "App_Data\\";
AppDomain.CurrentDomain.SetData("DataDirectory", p);