我有一个数据适配器。当我在运行时检查函数时,我看到了更改,但数据库中没有任何反应。我该如何调试?出了什么问题?
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;
答案 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 ....