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 中的文本字段进行比较