帮助DataAdapter - DB不更新?

时间:2009-10-08 14:28:02

标签: c# ado.net dataset

我有一个数据适配器。当我在运行时检查函数时,我看到了更改,但数据库中没有任何反应。我该如何调试?出了什么问题?

OleDbDataAdapter adapter = new OleDbDataAdapter();
string queryString = "SELECT * FROM tasks";
OleDbConnection connection = new OleDbConnection(cn.ConnectionString);
adapter.SelectCommand = new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

connection.Open();

adapter.Fill(ds.Tables["Tasks"]);                      

adapter.Update(ds);

return ds;

6 个答案:

答案 0 :(得分:2)

数据库中没有发生任何事情,因为您正在运行SELECT查询。你期待发生什么?

答案 1 :(得分:1)

除非你剪掉了很多代码,否则你本身并没有改变数据集中的任何内容。

你想要达到什么目的?

在这里,您选择一些数据,用数据集填充数据集,然后在数据库中放回未更改的数据集。

在调用adapter.Update(ds)

之前,您应首先更改数据集本身的内容

干杯, 弗洛里安

答案 2 :(得分:1)

您正在通过SelectCommand选择数据。如果要更新数据,则需要运行UpdateCommand。

答案 3 :(得分:1)

我假设您没有发布完整的源代码,因为它看起来好像您没有修改数据集。但是,我只是稍微调整了一下你的代码(参见我的评论)。

希望这会有所帮助......

string queryString = "SELECT * FROM tasks";
OleDbConnection connection = new OleDbConnection(cn.ConnectionString);
connection.Open(); // open connection first

SqlCommand cmd = new SqlCommand(queryString, connection);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); // use the cmd above when instantiating the adapter
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

adapter.Fill(ds.Tables["Tasks"]);                      

// Modify your dataset here.
// Don't call AcceptChanges() as this will prevent the update from working.

adapter.Update(ds);

connection.Close(); // Close connection before ending the function

return ds;

这应该允许OleDbCommandBuilder通过自动编写数据库更新脚本来完成它。

答案 4 :(得分:0)

据我所知,你实际上没有改变任务表的任何内容。当您调用adapter.Fill时,您将使用数据库中的记录填充空数据集。然后,您将调用adapter.Update而不更改数据集中的任何记录。更新命令仅在数据集>执行时执行更改。数据表>数据行进行编辑并标记为脏。

答案 5 :(得分:0)

您只是指定了select命令。你还需要指定插入命令...即: DataAdapter.InsertCommand = new OleDbCommand ....