【问题标题】:How to add .mdb database into to Visual Studio 2013 published application如何将 .mdb 数据库添加到 Visual Studio 2013 已发布的应用程序
【发布时间】:2014-07-05 20:50:18
【问题描述】:

我对 VS 2013 非常陌生。我正在使用 Visual Basic。我创建了一个名为“assets”的文件夹并将mq.mdb 放入该文件夹中。然后从 VS 2013 的解决方案资源管理器中,右键单击 mq.mdb 并选择包含在项目中。该文件也列在项目属性中。我的程序在调试和发布模式下工作,即它使用资产文件夹中的 mq.mdb 文件。

但是当我发布这个然后尝试运行应用程序时,它会抛出 Not valid path 错误。(请查看随附的屏幕截图)

编辑 2. (之前忘了提)我还设置了 MDB 文件的 Build Action 属性为 Content 和 Build。 MDB 文件也包含在发布设置中。

我什至参观了该地点。它的路径很长,但是那里也存在 .mdb 文件,但我仍然遇到错误。我被困在这里好几个小时了。


编辑 1.

(如果它有助于解决查询)我正在像这样调用 MS 访问数据库 -

dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
dbSource = "Data Source = " + AppDomain.CurrentDomain.BaseDirectory + "assets/mq.mdb;"
dbPassword = "Jet OLEDB:Database Password=password;"
con.ConnectionString = dbProvider & dbSource & dbPassword
con.Open()
sql = "SELECT * FROM tblTest"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "Test")
con.Close()

谢谢。问候,

【问题讨论】:

    标签: .net vb.net visual-studio visual-studio-2012 visual-studio-2013


    【解决方案1】:

    在解决方案资源管理器中选择 MDB 文件,然后将其构建操作属性设置为内容并构建。转到项目属性的发布页面,然后单击应用程序文件按钮。您应该会发现 MDB 文件在发布中列为“包含”。

    当您发布此类应用程序时,ClickOnce 会检测到 MDB 文件是数据文件,并将其安装在专用于数据文件的特定文件夹中。该文件夹的绝对路径不会向您透露,但您不需要它。您在连接字符串中使用 |DataDirectory| 占位符来引用它,它会在运行时得到解决。您可以将代码更改为:

    dbSource = "Data Source = |DataDirectory|\mq.mdb;"
    

    实际上没有必要为连接字符串使用这三个单独的变量,因为您可以使用单个字符串文字,但是,如果您真的想单独设置每个值,我建议您使用连接字符串生成器,例如

    Dim builder As New OleDbConnectionStringBuilder
    
    builder.Provider = "Microsoft.Jet.OLEDB.4.0"
    builder.DataSource = "|DataDirectory|\mq.mdb"
    builder.Add("Jet OLEDB:Database Password", "password")
    
    Dim connection As New OleDbConnection(builder.ConnectionString)
    

    【讨论】:

    • 我已经将它的 Build Action 属性设置为 Content 并且是的,它也包含在发布中。(对不起,我之前忘了提到这个问题)。屏幕截图中显示的错误是在完成所有这些之后。而且我还确认 .mdb 文件存在于上述路径中。
    • 感谢更新的答案。早些时候我的数据文件路径不正确(很明显,我使用的是assets 文件夹而不是|DataDirectory|)。现在它适用于 ClickOnce。但与此同时,我正在使用 InstallShield 制作 SingleImage 安装文件。现在看来,InstallShield 不理解 |DataDirectory| 并且 InstallShield 在根目录中创建了 MDB 文件的安装程序搜索,而不是其专用的 Database[DATABASEDIR] 文件夹。有什么办法可以解决这个问题,以便在修改的情况下,我不必对两者都进行更改?
    • |DataDirectory| 占位符在运行时解析。对于 ClickOnce 部署的应用程序,它解析为一个特殊的 ClickOnce 托管文件夹,对于 ASP.NET 应用程序,它解析为 App_Data 文件夹,而对于其他 Windows 应用程序,它解析为程序文件夹。您可以通过当前的AppDomain 在代码中更改它。您还可以将连接字符串存储在配置文件中,然后在部署期间或之后对其进行修改。例如,对于非 ClickOnce Windows 应用程序,“|DataDirectory|\assets”将解析为程序文件夹下的“资产”文件夹。
    • 谢谢。现在我明白了,|DataDirectory| 的行为如何。但是我没有得到您的解决方案(“通过当前的 AppDomain 在代码中更改它。您还可以将连接字符串存储在配置文件中,然后在部署期间或之后对其进行修改”)。如果您可以通过演示代码解释它,这对我非常有帮助。抱歉问得太多,但是作为一名医生,我对VS的了解不多,无法正确学习。我所能做的就是搜索stackoverflow和谷歌。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多