Помогите с DataAdapter - БД не обновляется? - PullRequest
0 голосов
/ 08 октября 2009

У меня есть адаптер данных. Когда я проверяю функцию во время выполнения, я вижу изменения, но в базе данных ничего не происходит. Как мне отладить это? Что пошло не так?

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 ]

2 голосов
/ 08 октября 2009

В базе данных ничего не происходит, потому что вы выполняете запрос SELECT. Что вы ожидаете, чтобы случиться?

1 голос
/ 08 октября 2009

Я предполагаю, что вы не опубликовали полный исходный код, так как похоже, что вы не изменяете набор данных. Тем не менее, я просто немного подправил ваш код (см. Мои комментарии).

Надеюсь, это поможет ...

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 сделать свое дело, автоматически создавая сценарии обновления базы данных.

1 голос
/ 08 октября 2009

Вы выбираете данные с помощью команды SelectCommand. Если вы хотите обновить данные, вам нужно запустить UpdateCommand.

1 голос
/ 08 октября 2009

Ну, если вы не отрежете много кода, вы ничего не измените в наборе данных как таковом.

Чего ты пытаешься достичь?

Здесь вы выбираете некоторые данные, заполняете им набор данных, а затем помещаете обратно в базу данных неизменный .

Вы должны сначала что-то изменить в самом наборе данных, прежде чем вызывать адаптер. Обновление (ds)

Cheers, Florian

0 голосов
/ 08 октября 2009

вы указываете только команду выбора. вам также нужно указать команду вставки ... т.е. DataAdapter.InsertCommand = new OleDbCommand ....

0 голосов
/ 08 октября 2009

Насколько я вижу, вы фактически не изменили ни одного содержимого таблицы задач. Когда вы вызываете адаптер. Заполните пустой набор данных записями из базы данных. Затем вы вызываете адаптер. Обновление без изменения каких-либо записей в наборе данных. Команда update выполняет изменения только тогда, когда набор данных> datatable> datarows редактируется и помечается как грязный.

...