TableAdapter.Update не всегда записывает изменения обратно в базу данных - PullRequest
0 голосов
/ 24 февраля 2012

Я столкнулся со странной проблемой с одним из моих новейших небольших инструментов.

У меня есть одна база данных SQLite с одной таблицей (журналом) внутри.Я редактирую данные через DataGrid, который работает нормально.Но иногда по непонятной причине и без каких-либо исключений он просто не записывает изменения или новые строки обратно в базу данных.Это довольно раздражает, вы можете догадаться.Вот мой код:

    private JournalTableAdapter adapter = new JournalTableAdapter();
    private DataSetAccounting dataset = new DataSetAccounting();

    public MainWindow()
    {
        InitializeComponent();

        adapter.Connection = new SQLiteConnection("Data Source=Database/accounting.s3db");
        adapter.Fill(dataset.Journal);

        dataset.Journal.JournalRowChanged
            += new DataSetAccounting.JournalRowChangeEventHandler(Journal_JournalRowModified);
        dataset.Journal.JournalRowDeleted
            += new DataSetAccounting.JournalRowChangeEventHandler(Journal_JournalRowModified);
        dataset.Journal.TableNewRow
            += new System.Data.DataTableNewRowEventHandler(Journal_TableNewRow);

        dataGridAccounting.DataContext = dataset.Journal.DefaultView;
    }

    void Journal_JournalRowModified(object sender, DataSetAccounting.JournalRowChangeEvent e)
    {
        e.Row.EndEdit();
        adapter.Update(dataset.Journal);
    }

    void Journal_TableNewRow(object sender, System.Data.DataTableNewRowEventArgs e)
    {
        e.Row[2] = DateTime.Now.Date;
    }

Довольно просто и легко, я думал, но не работал так, как ожидал = / Я не очень много работаю с ADO.NET/SQL-Adapters, так что будьте милостивы*

С уважением, Нефарий

1 Ответ

0 голосов
/ 27 февраля 2012

Мех, прости, я тупой.Я использовал автоматически сгенерированную версию набора данных Visual Studio, которая сравнивает каждый параметр в WHERE-части, поэтомуон не может найти оригинальную строку в БД.Во время работы в VS я мог воспроизвести ошибку и получил исключение.Не бери в голову, я продолжу читать мою книгу по C # / ADO.NET =)

...