Вставка строки в БД Access 2003 с помощью TableAdapter

Я новичок в использовании TableAdapters и не знаю, что происходит. По сути, я пытаюсь экспортировать данные из одной базы данных в другую базу данных с другой схемой, используя сгенерированный набор данных. Кажется, все работает нормально с точки зрения заполнения строки целевой базы данных, когда я выполняю код. Однако, когда я пытаюсь добавить строку в целевую базу данных, кажется, что строка не вставляется. У вас есть идеи? Я установил базу данных, которая была добавлена ​​в проект, чтобы она не копировалась в выходной каталог... поэтому предложения, которые я видел в Интернете, похоже, не работали.

        OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\database.mdb;");

        SomeTableAdapter tableAdapter = new SomeTableAdapter();
        tableAdapter.Connection = oleDbConnection;
        tableAdapter.Connection.Open();

        SomeDataSet.SomeDataTable dataTable = tableAdapter.GetData();
        SomeDataSet.SomeDataRow dataRow = null;

        // Do some checks on the existing rows

        // Creation of new row is necessary
        if (dataRow == null)
            dataRow = dataTable.NewSomeRow();

            // Populate row fields

            dataTable.AddSomeRow(dataRow);
            dataTable.AcceptChanges();
        }
        else
        {
            // Update exiting row
        }

        tableAdapter.Update(dataTable);
        tableAdapter.Connection.Close();

person Community    schedule 24.12.2009    source источник


Ответы (1)


Вы стреляете себе в ногу, вызывая AcceptChanges(). Он помечает все изменения в наборе данных как «зафиксированные», поэтому следующее обновление просто игнорирует их.

Как правило, никогда не следует вызывать AcceptChanges напрямую, за исключением сложных сценариев.

person Aviad P.    schedule 24.12.2009
comment
Спасибо за чаевые. Я понял, что на самом деле было причиной проблемы. Я сделал глупую оплошность и забыл заполнить обязательное поле. Спасибо хоть. - person ; 24.12.2009
comment
Подождите секунду, вы все-таки используете AcceptChanges, и это работает? Если это так, то я, должно быть, все время делал что-то неправильно... - person Aviad P.; 24.12.2009
comment
Я удалил AcceptChanges, и это сработало. Но да, я только что узнал, что вы правы, наличие AcceptChanges не позволяет записывать данные. На самом деле я пытался не использовать AcceptChanges в своем коде, но это все равно не сработало, потому что я не заполнил обязательное поле. - person ; 24.12.2009