数据库文件也在bin文件夹中

时间:2017-11-13 17:48:21

标签: sql vb.net

我在vb.net中使用基于服务器的数据库。为什么在运行我的应用程序时也会在bin文件夹中创建数据库文件(.mdf)的副本。我认为这就是我的datagridview没有使用以下代码更新我的sql表的原因:

Private Sub SAVE_Click(sender As Object, e As EventArgs) Handles SAVE.Click

    Validate()
    ParsreelsBindingSource.EndEdit()
    TableAdapterManager.UpdateAll(SkeduleringDatabasisDataSet)
    Close()

End Sub

1 个答案:

答案 0 :(得分:1)

您可以将数据文件添加到项目中,这是一个源文件,就像其他任何文件一样。您没有在运行时连接到该文件,因为您不希望用测试数据填充它并可能删除一些默认数据。该数据文件应保持清洁。

构建时,默认情况下,干净源文件与EXE一起复制到输出文件夹。它是您在运行时连接的副本。您可以根据自己的喜好进行测试,尽可能安全地了解源文件不受影响。如果它是发布版本,那么您可以使用应用程序部署一个干净的数据库。

默认情况下,数据文件的Copy to output directory属性设置为Always copy。这意味着每次构建项目时,都会在输出文件夹中创建数据文件的新副本。如果在没有进行任何代码更改的情况下运行项目两次,则没有构建因此没有新副本,因此在第一次运行期间所做的任何更改都将保留。如果您进行了代码更改,则项目是在第二次运行之前构建的,因此您的数据文件将被新副本覆盖,因此您的更改将会丢失。这种行为会让那些不了解如何管理本地数据文件或者没有正确阅读的人感到困惑。您的更改已保存。它们只是在你下次构建时被覆盖。

如果将Copy to output directory设置为Copy never,则不会将数据库复制到输出文件夹。如果您的代码尝试连接到该位置的数据库,则显然会失败。您需要将数据文件自己复制到该位置,或者,如果更改连接字符串,则需要复制到另一个位置。

最明智的选择是将Copy to output directory设置为Copy if newer。在这种情况下,除非您对源数据文件中的架构或默认数据进行了更改,否则不会创建数据库的新副本。这意味着调试时所做的更改将在会话之间生效。您可能会发现有时候当您不想要它时会制作新副本,但这仍然比替代方案更好,后者每次都会制作新副本。如果您没有触摸源数据文件,如果您没有更改架构或数据,那么您没有理由这样做,那么您的测试数据将在整个会话中存在。