Чего не хватает, используя OleDbDataAdapter.Update для обновления файла Access.mdb? - PullRequest
0 голосов
/ 18 ноября 2009

С помощью приведенного ниже кода мне удалось открыть базу данных Access.mpd и прочитать строки из таблицы Сохранено .

Однако, когда я пытаюсь изменить данные или добавить новые строки, я работаю нормально, пока работает программа, но кажется, что ничего не сохраняется в файле access.mdb.

Обновление: Очевидно, что OleDbCommand нельзя просто изменить внутри адаптера данных.

Обновление: AcceptChanges был мной по ошибке использован. Если он используется, он указывает, что затронутые строки не обновляются.

С этими обновлениями теперь работает код. Тем не менее, я ищу понимание проблемы, поэтому объяснения , почему будут оценены. Кроме того, если фиксированный код является подходящим способом.

        string connection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\...\Access.mdb;Persist Security Info=True";
        OleDbConnection conn = new OleDbConnection(connection);
        OleDbDataAdapter da = new OleDbDataAdapter();

        OleDbCommand cmd;

        cmd = new OleDbCommand();
        cmd.CommandText = "Saved";
        cmd.CommandType = CommandType.TableDirect;
        cmd.Connection = conn;
        da.SelectCommand = cmd;

        cmd = new OleDbCommand();
        cmd.CommandText = "Saved";
        cmd.CommandType = CommandType.TableDirect;
        cmd.Connection = conn;
        da.InsertCommand = cmd;

        cmd = new OleDbCommand();
        cmd.CommandText = "Saved";
        cmd.CommandType = CommandType.TableDirect;
        cmd.Connection = conn;
        da.UpdateCommand = cmd;

        cmd = new OleDbCommand();
        cmd.CommandText = "Saved";
        cmd.CommandType = CommandType.TableDirect;
        cmd.Connection = conn;
        da.DeleteCommand = cmd;

        OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
        da.InsertCommand = cb.GetInsertCommand();
        da.DeleteCommand = cb.GetDeleteCommand();
        da.UpdateCommand = cb.GetUpdateCommand();

        PbDataSet ds = new PbDataSet();
        da.Fill(ds, "Saved");
        PbDataSet.SavedDataTable table = ds.Tables["Saved"] as PbDataSet.SavedDataTable;

Здесь я пытаюсь изменить данные, которые работают. Однако он не сохраняется в файл. теперь это работает!

        PbDataSet.SavedRow sr = table.Rows[0] as PbDataSet.SavedRow;
        sr.berAktiv = true;   //Changeing data here

        sr.AcceptChanges();

        da.Update(table as DataTable);

        sr = table.NewSavedRow();
        sr.rtAktiv = true;
        table.AddSavedRow(sr);

        table.AcceptChanges();

        da.Update(table as DataTable);

Ошибок нигде нет.

Как это исправить, чтобы данные сохранялись в файле?

Как я могу проверить в запущенной программе, что она действительно была сохранена, кроме открытия файла?

1 Ответ

0 голосов
/ 18 ноября 2009

Чего я не вижу, так это того, что вы генерируете операторы обновления (или позволяете генерировать их) где угодно ...

//Select data
DataSet dataSet = new DataSet();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, db);
dataAdapter.FillSchema(dataSet, SchemaType.Source);
dataAdapter.Fill(dataSet);

//Make changes to the data in the data set...    

//Write changes to the mdb
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet);
...