Обновление не вступает в силу для SQLCe 3.5 с набором данных и адаптерами таблиц - PullRequest
1 голос
/ 11 августа 2011

Мы использовали мастер проектирования соединений VS2010 для определения соединения с базой данных SQLCe только с одной таблицей (database = "UserMetrics" table = "User"). Как бы мы ни пытались, обновление, похоже, не сохранилось. Я просматривал сообщения на SO и MSDN, но не вижу явной ошибки ...

        //initialize 
        UserMetricsDataSet umDataSet = new UserMetricsDataSet( );
        UserMetricsDataSetTableAdapters.UserTableAdapter umTableAdapter = new    UserMetricsDataSetTableAdapters.UserTableAdapter( );

        // check that test data is there and count is correct
        umTableAdapter.Fill( umDataSet.User );
        UserMetricsDataSet.UserRow umRow = (UserMetricsDataSet.UserRow)umds.User.Rows[0]; 
        int count = umDataSet.User.Rows.Count; //yep its there

        //lets add some rows
        for (int i = 0; i < 100; i++)
            umDataSet.User.AddUserRow( "smith", (float)54, (float)3, 1);

        umds.User.AcceptChanges( );
        //umTableAdapter.Update(umDataSet.User); //tried this also ... no change...

        // there are now 101 rows !!
        int count = umDataSet.User.Rows.Count; //yep its there
        umRow = (UserMetricsDataSet.UserRow)umds.User.Rows[101];

        //lets double check
        umTableAdapter.Fill( umDataSet.User );
        int count = umds.UserMetris.Rows.Count; //huh!!! count==1 ???

1 Ответ

1 голос
/ 11 августа 2011

Я предполагаю, что umDataSet - это то же самое, что и umds.

Как насчет?

UserMetricsDataSet.UserRow umRow = umDataSet.User.NewRow();
umRow["Name"] = "smith";
// etc
umDataSet.User.ImportRow(umRow);
umDataSet.User.AcceptChanges();

Или как насчет отмены заказа?Метод TableAdapter.Update() отправляет обновления обратно в базу данных на основе изменений в DataTable.Если сначала принять изменения, то RowState сбрасывается в каждой строке DataTable, поэтому не найдено обновлений для отправки обратно в базу данных.

От MSDN :

Чтобы отправить измененные данные в базу данных, вы вызываете метод Update TableAdapter.Метод обновления адаптера обновит одну таблицу данных и выполнит правильную команду (INSERT, UPDATE или DELETE) на основе RowState каждой строки данных в таблице.

try
{
    umTableAdapter.Update(umDataSet.User);
    umDataSet.User.AcceptChanges();
}
catch (Exception ex)
{
    // TableAdapter.Update() can throw exceptions
}
...