如何获取数据库目录?

时间:2011-05-10 23:56:46

标签: c# wpf visual-studio

我正在使用C:\wpf1\WpfApplication1\WpfApplication1文件夹中的Microsoft数据库。当我更新数据库时,它总是更新我不想要的C:\wpf1\WpfApplication1\WpfApplication1\bin\Debug内的那个。

如何在不输入此全名的情况下获取文件夹C:\wpf1\WpfApplication1\WpfApplication1

2 个答案:

答案 0 :(得分:1)

这里有一篇文章about sql server compact edition

我认为新版本中的任何内容都没有变化,但是因为我使用它已经有一段时间了。

| DataDirectory目录|工作如下

您的连接字符串通常如下所示 “数据源= | DataDirectory | \ Mydb.sdf”

要设置DataDirectory属性,请调用AppDomain.SetData方法。

如果未设置DataDirectory属性,则将应用以下默认规则来访问数据库文件夹:

对于放在用户计算机上的文件夹中的应用程序,数据库文件夹使用应用程序文件夹。 (这是调试时应用的默认规则,因此\ bin \ debug中的数据库是更新的数据库的原因)

对于在ClickOnce下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。

过去我做过以下

处理settings.vb中的SettingsLoaded事件

        Private Sub MySettings_SettingsLoaded(sender As Object, e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded

        If Not Debugger.IsAttached Then
            My.Settings.SQLCEConnectionString = "somefolder\somefile.sdf"
        End If

    End Sub

答案 1 :(得分:0)

目录C:\wpf1\WpfApplication1\WpfApplication1是您的项目目录 - 它是源代码所在的目录,但它通常不是您的应用程序通常会知道或使用的目录(例如,如果您的应用程序已安装)到另一台PC然后这个目录就不存在了。)

使用数据库或相关文件时的常用方法是:

  • 将文件放在其他常用位置(例如C:驱动器上的文件夹中)
  • 让应用程序使用输出(bin\Debug\)目录中的文件副本,即应用程序将安装到的目录 - 您可以更改解决方案中项目的属性以使其具有项目一直复制到输出目录,或者仅当解决方案目录中的项目较新时才复制到输出目录:

Screenshot of the properties pane for a project item in Visual Studio

如果确实想要使用C:\wpf1\WpfApplication1\WpfApplication1目录,那么这样做的方法是假设此目录总是比当前工作目录高2:

Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, "..\\.."));

这当然会产生两个可怕的假设,首先是当前目录是包含.exe的目录,其次是你想要的目录总是比这个目录高2个 - 我强烈建议你找到另一种方式因为这种逻辑极不可能在最终用户PC上运行。