【问题标题】:MS Access DB doesnt save changes after execution (C#)MS Access DB 执行后不保存更改(C#)
【发布时间】:2011-03-06 14:31:04
【问题描述】:

我有以下代码用于使用访问数据库

 OleDbConnection con = new OleDbConnection(myproject.Properties.Settings.Default.myDBConnectionString);
 con.Open();
 OleDbCommand command = new OleDbCommand("INSERT INTO components (name) VALUES (@p_col1)", con);
 command.Parameters.Add("@p_col1", OleDbType.VarChar).Value = "test row";
 int rows = command.ExecuteNonQuery();

此时行值为 1,当我进行选择查询后,插入的行可用。当程序完成时,问题就出现了:在进一步的执行中,该行不再存在。

我已经尝试过交易

OleDbTransaction transaction = con.BeginTransaction();
command.Transaction = transaction;
transaction.Commit();

并以这种方式使用 DataSet 和 ADO

//... add row to dataset ...
OleDbDataAdapter sda = new OleDbDataAdapter("select * from components", con);
OleDbCommandBuilder cb = new OleDbCommandBuilder(sda);

sda.Update(ds.Components); //tried with ds.Components.AcceptChanges(); before and after this line

但在每种情况下我都有同样的问题,似乎插入查询不是在真实数据库中完成的。你知道为什么会这样吗???

提前致谢

【问题讨论】:

  • 您确定您正在查看正确的数据库......?
  • 那么在你用参数做INSERT语句后,数据在表中是可见的?

标签: c# ms-access ado.net insert oledb


【解决方案1】:

数据库在你的 bin 目录中吗?它也是你项目的一部分吗?我已经看到,每次构建它时都会使用项目目录中的数据库覆盖 bin 目录中的数据库,因此看起来事情没有得到保存。

【讨论】:

  • 每次构建时,我都会用项目中的数据库覆盖 bin 目录中的数据库。这不是一个时尚的解决方案,而是更改 connectionString 的 DataSource 属性,使其指向项目目录中的数据库,现在可以使用。
【解决方案2】:

可能有多个数据库,而您没有插入到您认为要插入的数据库。

【讨论】:

    【解决方案3】:

    MS Visual Studio 将 Access DB 构建到产品中。 --- 该产品位于您的 bin 目录中。 --- 要通过应用程序查看对数据库的任何和所有更改,请使用这个 当您最初将数据库添加到项目中时,它被设置为始终在构建时更新产品。 这可能是一件好事,但我觉得这很烦人。 为了解决这个问题: 从解决方案资源管理器中选择 MS Access DB, 按 F4 进入它的属性, 将“复制到输出目录”字段更改为“如果较新则复制”而不是“始终”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多