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

时间:2011-03-06 14:31:05

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

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

 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

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

提前致谢

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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