TableAdapter.Update并不总是将更改写回数据库

时间:2012-02-24 12:19:13

标签: c# sqlite datatable dataset

我用我最新的小工具碰到了一个奇怪的问题。

我有一个SQLite数据库,里面有一个表(Journal)。我正在通过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很多,所以请怜悯:)

真诚的,你的, Nefarius

1 个答案:

答案 0 :(得分:0)

对不起,我很蠢。我使用了visual studio的自动生成的数据集版本,它比较了WHERE部分中的每个参数,因此也是如此。他找不到DB中的原始行。在VS中运行时,我可以重现错误并获得异常。没关系,我会继续阅读我的C#/ ADO.NET书籍=)