关于”数据库连接串中的 |DataDirectory|”

这是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);
posted @ 2012-04-03 11:03  怒杀神  阅读(556)  评论(0编辑  收藏  举报