我能在使用Visual Studio调试C#代码时提交更改到实际数据库吗?

4
我正在使用Visual Studio创建一个C#应用程序,它使用SQLExpress数据库。当我按下f5调试应用程序并更改数据库时,我认为发生的情况是在bin/debug文件夹中有一个数据库副本被更改。
然而,当我停止调试,然后再次按下f5时,会将一个新的数据库副本放入bin/debug文件夹中,以便上一次所做的所有更改都消失了。
我的问题是:
当我调试应用程序时,是否有一种方法可以使其对实际数据库进行更改,并且这些更改实际上被保存,还是它只会对bin/debug文件夹中的副本进行更改(如果实际上是这样)?
我看到过类似的问题,但我找不到一个回答,说是否可能使这些更改持久化在实际的.mdf文件中。
我之所以问这个问题,是因为在构建这个应用程序时,我不断添加组件并测试以确保它们都能协同工作。当我输入测试数据时,我使用的是真实数据,我希望这些数据留在数据库中。这只是帮助我避免以后重新输入数据。
感谢您提前提供任何帮助或信息,这可以帮助我更好地理解这个过程。

我需要做与您的问题类似的事情,我该如何实现您遇到的问题。 - Zeeshan Adil
3个回答

12

在解决方案资源管理器中选择数据库,将 "复制到输出目录" 更改为 "仅在较新时复制"。稍后,在您最终获得最终版本时,将调试文件夹中的数据库复制粘贴到源文件夹中。


非常感谢。这解决了问题。我已经寻找这个解决方案几天了。 - nathant23
无法工作在我身上。bin数据库版本是正在更新的,而不是“one”/原始数据库版本。 - ralphgabb
@ralphspoon,确实,bin文件夹中的版本将是更新的版本。如果您想要更新原始版本,您需要更改连接字符串。 - Martheen
@Martheen 是的,我已经将连接字符串更改为手动路径,而不是默认路径。重新启动了 Visual Studio,清理了项目,现在一切都正常了。谢谢。 - ralphgabb
@Martheen,我该如何实现类似 OP 的错误功能?我想在首次“构建”项目后仅对 bin 文件夹中的数据库进行更改,并且希望项目中的原始 .mdf 文件保持不变。这可行吗? - Zeeshan Adil

2
'复制较新文件'的问题在于,当您对数据库结构的任何部分进行更改时,该更改是针对项目目录中的版本而不是正在调试目录中创建的版本。此外,当您尝试进行非调试运行时,您将不使用在调试位置上进行更改的副本。
我通常使用Postgresql,但由于这是一台新电脑,我发现MS有这个Lite版本,所以决定尝试一下。我有很多历史数据要放入表格中,然后用一些SQL进行手动操作,然后我可以继续创建数据库的实际功能。
您不能只将更改后的版本复制到项目目录中,因为有一个日志文件,但似乎没有人知道其中内容,但Microsoft迫切需要将其与某种方式中的数据库文件匹配。 (我猜您也已经尝试过了)。
我不想每次运行时都从头开始,就像您一样,我找不到解决方案。所以在绝望的情况下,我将Debug中的版本复制到一个tmp目录中。然后删除了项目解决方案资源管理器中的版本。
然后我将tmp中的版本拖放到解决方案资源管理器中。(除下面所述的外,其中的所有内容在结构上都与原始版本相同)
这样做就可以重新创建Log文件。现在我的调试会话从一个准备好的加载数据开始。
警告。 1)更改数据库结构。 在解决方案资源管理器中,Linq到SQL DBML文件,如果您已在代码中更改了数据库的某些结构部分(这是我倾向于做的地方),请右键单击DBML文件并进入设计视图。然后将您添加的任何新表或视图拖入设计中。
2)因为必须删除和拖放数据库看起来有点可疑,所以编写一个函数,在调试模式下运行Form_Open时复制您的数据库文件,例如
我的MyDatabaseBackup \myDatabase_date_time.mdb
记住,如果您随时返回以前的版本,则需要将其重命名为myDatabase.mdb

-1

将数据库复制到适当的位置,并更改配置文件中的连接字符串,以仅指向该位置,这只是一个建议,因为不确定应用程序的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接