zoukankan      html  css  js  c++  java
  • 使用|DataDirectory| 的烦恼

        Ado.net2.0中新增加了一个MagicValue,可以在应用程序的配置文件的数据库链接串种使用|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开发web应用,asp.net 2.0特有几个特殊的文件夹App_Data就是其中一个,web应用的数据库大可以放在这个下面,一直工作的很好。......知道有一天开始写winform的程序,^_^,当然也想享受这种方便啦,可是发现Windows应用项目中不支持特殊的文件夹,根本没有这种东西!没关系咱自己建,还叫App_Data,运行发现数据库连不上,从错误信息中来看,原来Winform中把|DataDirectory|翻译成了程序启动目录apppath\bin\debug(或release),后面不带App_Data!数据库文件倒是自动复制倒了运行目录下(带着App_Data的目录)没关系,咱自己加上,把上面的链接串改成这样
     <connectionStrings>
            
    <add name="ConnectionString" connectionString="data  source=.\SQLEXPRESS;Integrated  Security=SSPI;AttachDBFilename=|DataDirectory|App_Data\data.mdf;User  Instance=true" providerName="System.Data.SqlClient" />
     
    </connectionStrings>
    一运行,哈哈,链接成功了。试着录入几个数据,保存,ok没问题!退出,再运行,一看傻眼了,刚才录入的数据不见了!研究半天明白了,原来每次运行,.net都自动复制了一份数据库到运行目录,所以上次的数据就都丢失了!想到两个解决办法,1,把数据库的属性中的“复制到输出目录”设置为“不复制”,这样Debug和Release编译版本各用各的数据库,原始的数据库始终是空的!(好像也有用)2,链接到程序目录中的App_Data下的数据库。由于对第一种解决办法,自我感觉有点儿迷惑和Webform中的经验不一致,所以决定用第二种,Google了一下,有位我不认识的老外^_^给出了解决办法http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx,就是在程序启动时,设置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目录字符串);Winform的程序那当然是在Main函数中了,废话不说了,我的代码如下
    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);
    思想就是去掉调试期间和生产期间的不同,这样要注意的是,发布程序的时候,数据库也要放到App_Data目录下面。
  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/dajianshi/p/808495.html
Copyright © 2011-2022 走看看