更新对带有数据集和表适配器的SQLCe 3.5无效

本文关键字:SQLCe 无效 适配器 数据集 更新 | 更新日期: 2023-09-27 18:05:10

我们使用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 ???

更新对带有数据集和表适配器的SQLCe 3.5无效

我假设umDataSetumds是一样的。

呢?

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

或者颠倒顺序呢?TableAdapter.Update()方法根据DataTable中的变化将更新发送回数据库。如果您首先接受更改,那么RowState将在每个DataTable行上重置,因此没有发现要发送回数据库的更新。

从MSDN:

为了将修改后的数据发送到数据库,调用TableAdapter的Update方法。适配器的Update方法将更新单个数据表,并根据表中每个数据行的RowState执行正确的命令(INSERT、Update或DELETE)。

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