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

    Ado.net2.0中新增加了一个MagicValue,可以在应用程序的配置文件的数据库链接串种使用|DataDirectory| ,例如: 

    <connectionStrings>
            <add name="ConnectionString" 
                 connectionString="data source=.;Integrated Security=SSPI;AttachDBFilename=|DataDirectory| est.mdf;" providerName="System.Data.SqlClient" />
        </connectionStrings>


    原来一直使用ASP.net开发web应用,asp.net 2.0特有几个特殊的文件夹App_Data就是其中一个,web应用的数据库大可以放在这个下面,一直工作的很好。

    ......直到有一天开始写winform的程序,^_^,当然也想享受这种方便啦,可是发现Windows应用项目中不支持特殊的文件夹,根本没有这种东西!没关系咱自己建,还叫App_Data,运行发现数据库连不上,从错误信息中来看,原来Winform中把|DataDirectory|翻译成了程序启动目录apppathindebug(或release),后面不带App_Data!数据库文件倒是自动复制到了运行目录下.

    注:使用Debug模式|DataDirectory|将翻译成:apppathindebug,Release模式翻译为:apppathindebug elease文件夹.

    这样非常麻烦,难不成我还要在发布的时候更换数据库存放目录?
    有位我不认识的老外^_^给出了解决办法:

    http://blogs.msdn.com/dataaccess/archive/2005/10/28/486273.aspx

    就是在程序启动时,设置AppDomain.CurrentDomain.setData(“DataDirectory”,我的目录字符串);该方法重新设置|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);
    复制代码

    思想就是去掉调试期间(DEBUG)和发布期间(Release)的不同,这样要注意的是,发布程序的时候,数据库也要放到App_Data目录下面。
    下面的代码起同样的效果,代码如下:

    复制代码
                string dataDir = AppDomain.CurrentDomain.BaseDirectory;
                if (dataDir.EndsWith(@"inDebug")
                || dataDir.EndsWith(@"inRelease"))
                {
                    dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName + "\App_Data";
                    AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
                }
    复制代码

    数据库连接配置文件与最上面asp.net的web.config配置完全相同,注意在WinForm中并不存在App_Data文件夹这个特殊文件夹,我们只需新建文件夹改名为App_Data,然后将数据库文件放入该文件夹即可.

  • 相关阅读:
    Leetcode 58. 最后一个单词的长度 双指针
    Leetcode 125. 验证回文串 双指针
    拜托,大厂做项目可不简单!
    被问懵了:一个进程最多可以创建多少个线程?
    面对祖传屎山代码应该采用的5个正确姿势
    VUE代码格式化配置vetur、eslint、prettier的故事
    如何快速实现一个虚拟 DOM 系统
    NodeJS 进程是如何退出的
    [堆][启发式合并]luogu P3261 [JLOI2015]城池攻占
    [Trie][堆]luogu P5283 [十二省联考2019]异或粽子
  • 原文地址:https://www.cnblogs.com/wzihan/p/14745635.html
Copyright © 2011-2022 走看看