MS Access DB 执行后不保存更改(C#)

Posted

技术标签:

【中文标题】MS Access DB 执行后不保存更改(C#)【英文标题】:MS Access DB doesnt save changes after execution (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语句后,数据在表中是可见的? 【参考方案1】:

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

【讨论】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于MS Access DB 执行后不保存更改(C#)的主要内容,如果未能解决你的问题,请参考以下文章

MS Access - 关闭表单而不保存设计更改,acSaveNo 不起作用

JET OLEDB 参数如何将字符串与 Access DB 中的文本字段进行比较

使用 MS Access 的 C# 标准表达式中的数据类型不匹配?

使用 PHP 连接到 MS Access DB

MS Access DAO 连接在退出时放弃更改

使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值