使用数据集和表适配器更新未对SQLCe 3.5生效

时间:2011-08-11 19:04:27

标签: c# dataset sql-server-ce

我们使用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 个答案:

答案 0 :(得分:1)

我假设umDataSetumds相同。

怎么样?

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

或者如何扭转订单呢? TableAdapter.Update()方法根据DataTable中的更改将更新发送回数据库。如果您首先接受更改,则会在每个DataTable行上重置RowState,因此找不到要发送回数据库的更新。

来自MSDN

  

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

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