【问题标题】:How to publish my windows form application with database如何使用数据库发布我的 Windows 窗体应用程序
【发布时间】:2013-11-18 13:45:10
【问题描述】:

我正在 Viusal Studio 2012 中使用 vb.net 和 MS Access 开发 Winform 应用程序。 我完成了我的申请,现在我只想发布它。在我的项目解决方案中,我有表单和 rpt 文件(水晶报告)。我使用以下连接字符串连接到我的项目解决方案中未包含的数据库:

     conn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\tblcmplist.mdb"

现在数据库应该在我的应用程序启动的文件夹中。如果我从 bin 文件夹运行,它可以工作,但是如果我通过右键单击解决方案->发布来发布我的应用程序,并且如果我从发布的位置运行,我会收到错误,例如数据库文件丢失。

我将我的数据库文件复制到我的应用程序的启动文件夹中,但仍然出现错误。请问有什么解决办法。

还有一件事我不得不问我在我的应用程序中使用水晶报表。我安装了 CRforVS_13_0_5 开发人员版本,并在 Visual Studio 中创建了报告,我可以查看它工作正常的报告。但是,如果我在客户端机器中运行应用程序,它会给出错误找不到水晶报告等等……我应该在客户的电脑上安装什么来查看报告?请帮帮我谢谢....

【问题讨论】:

  • 我所做的只是将程序的所有内容放在驱动器 C 中,这样我就不必担心重新编码文件路径以进行访问
  • 您使用的是 Click-Once 部署吗?
  • 是的,我正在使用 Click-Once 部署

标签: vb.net visual-studio-2012 crystal-reports


【解决方案1】:

您需要在应用程序设置中将数据库部署为“IncludeData”。这将使它出现在 ApplicationDeployment.DataDirectory 定义的文件夹中(作为 ClickOnce 应用程序运行)。要从 VS 进行测试以及部署,您需要执行以下操作:

string dataPath;
if (ApplicationDeployment.IsNetworkDeployed)
  dataPath = ApplicationDeployment.CurrentDeployment.DataDirectory;
else
  dataPath = System.Windows.Forms.Application.StartupPath;
dataPath = System.IO.Path.Combine(dataPath, "yourdatabasefilename");
If you deploy it in the Database folder and mark it as Include instead of Include(Data), the datapath would be 
Path.Combine(System.Windows.Forms.Application.StartupPath, "Database\yourdatabasefilename");

如果您将其部署为数据,则当您发布更新时,它将被向前复制。如果您更改它的本地副本,将部署一个新版本,而旧版本将放置在名为 .\pre 的 Data 文件夹的子文件夹中。然后,如果您需要迁移数据,则可以。 如果您希望更详细地替换数据库,请查看这篇文章,它向您展示了如何在 ClickOnce 更新之间保留数据: http://robindotnet.wordpress.com/2009/08/19/where-do-i-put-my-data-to-keep-it-safe-from-clickonce-updates/

Source

【讨论】:

    【解决方案2】:

    可能有几种解决问题的方法: 您可以制作一个测试程序,显示一个显示 Application.StartupPath 的 msgBox,以便您可以手动检查数据库应该在哪里,并查看数据库是否实际上位于该位置。

    除此之外,您还可以使用 Try Catch,如下所示:

        Try
            'your database call
        Catch ex As Exception
             MsgBox(ErrorToString & Environment.NewLine & Environment.NewLine & ex.ToString)
        Finally
            conn.Close()
        End Try
    

    我使用 ErrorToString 使其易于理解并给出了问题可能是什么的基本概念,然后我使用 Environment.NewLine 制作 2 个新行,为 ex.toString 留出一些间距,以了解更多具体细节在代码中。

    如果你每次都遇到死胡同,如果不通过代码手动创建数据库文件,也可以检查form_load上是否存在数据库文件。

    【讨论】:

    • 我在发布应用程序后得到了 application.startuppath 的确切位置,所以我手动复制了该位置的访问文件,所以它正在工作。取而代之的是,我从我的 VS2012/projects/ 目录的 bin 文件夹中选择 exe 文件,并使用 innosetup 来设置我的应用程序。但我对水晶报告感到震惊。不知道应该包括什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多