【问题标题】:Database seems to update during execution, then changes disappear数据库似乎在执行期间更新,然后更改消失
【发布时间】:2021-01-25 23:25:00
【问题描述】:

我正在尝试用 C# 创建一本食谱书,我可以在其中轻松搜索我可以使用手头的哪些成分制作的食谱。在这一点上,这对我来说主要是一个学习练习。

现在,我正在尝试更新我的数据库中的表。它似乎在代码的一个实例中起作用,但是在我下次运行它时更改就消失了。

所以我的数据库中有一个这样的表:

我从一个 json 文件创建了一个示例食谱的小列表

var js = new JsonImporter() { SourceDirectory = Path.Combine(Directory.GetCurrentDirectory(), "test_data") };
List<Recipe> recipes = js.ImportData<Recipe>("test_recipes.json");

连接到我的表并 InsertAllOnSubmit:

DataContext db = new DataContext(connectionString);
Table<Recipe> db_recipes = db.GetTable<Recipe>();
db_recipes.InsertAllOnSubmit(recipes);

显示表格中有多少条目,提交更改,刷新条目数量,再次显示表格中有多少:

MessageBox.Show(db_recipes.Count().ToString());
db.SubmitChanges();
db_recipes = db.GetTable<Recipe>();
MessageBox.Show(db_recipes.Count().ToString());

第一个消息框显示 1(我在表中有一行是通过服务器资源管理器手动输入的),第二个消息显示 3。这是我所期望的,因为我要添加 2 个条目。

但是,一旦我再次运行代码,消息框再次显示 1 和 3,而不是始终递增 2。所以在我看来,数据库没有保存。谁能帮我弄清楚这里发生了什么?

【问题讨论】:

  • 您是否在重新运行代码之前检查了数据库本身(使用数据库客户端,而不是您的 C# 应用程序)是否正确更新?如果数据库在此阶段显示更新并在您重新运行 C# 应用程序时丢失它们,您可能会丢失数据库提交。仅供参考:包括您正在使用的数据库,例如 Sql Server。 MySql、Postgres 等和版本号。
  • 是的,我确实检查过,并且数据库在执行期间没有更新。谢谢!老实说,我再也找不到我用来创建数据库的指南了。我认为它是MS-SQL。当我在 SQL Server 对象资源管理器中查找它时,它被称为 (localdb)\MSSQLLocalDB (SQL Server 13.0.4001 - {username})。我还不确定这意味着什么。

标签: c# linq linq-to-sql


【解决方案1】:

您从未说过您使用什么数据库,但我认为它很可能是基于文件的,无论是 Access 还是 SQL Server(在“在运行时附加 mdf 文件”模式下)

通常对于基于文件的数据库,我们最终会对其进行设置,以便在项目文件夹中与源代码一起存在一个版本的 db 文件。每次构建项目时都会将其复制到输出目录,并且输出目录包含 exe 和 db。 exe 修改输出文件夹中的数据库。下次构建/运行时,源代码文件夹中的空白数据库将复制到在输出文件夹中修改过的数据库的顶部

运行您的项目,获取 exe 以修改 db,停止 exe,然后搜索整个项目文件夹(使用 windows 文件搜索)甚至整个硬盘以查找您的 db 文件的名称。通过查看文件修改日期,您将了解发生了什么。

如果它是基于文件的数据库,请在 CS 解决方案资源管理器中找到该数据库,单击它并将其“复制到输出”设置设置为“如果较新则复制”,这样它只会在方案有的情况下擦除输出数据库改变了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多