使用数据集和表适配器更新对SQLCe 3.5不起作用 [英] Update not taking effect on SQLCe 3.5 with dataset and table adapters

查看:103
本文介绍了使用数据集和表适配器更新对SQLCe 3.5不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们使用VS2010数据连接设计向导通过一个表(database =UserMetricstable =User)来定义与SQLCe数据库的连接。尝试,因为我们可能更新似乎没有,我已经通过SO和MSDN的帖子,但看不到明显的错误...

  //初始化
UserMetricsDataSet umDataSet = new UserMetricsDataSet();
UserMetricsDataSetTableAdapters.UserTableAdapter umTableAdapter = new UserMetricsDataSetTableAdapters.UserTableAdapter();

//检查测试数据是否存在,计数正确
umTableAdapter.Fill(umDataSet.User);
UserMetricsDataSet.UserRow umRow =(UserMetricsDataSet.UserRow)umds.User.Rows [0];
int count = umDataSet.User.Rows.Count; // yep it there

//允许添加一些行
(int i = 0; i <100; i ++)
umDataSet.User.AddUserRow(smith ,(浮动)54,(浮动)3,1);

umds.User.AcceptChanges();
//umTableAdapter.Update(umDataSet.User); //尝试这个也没有变化...

//现在有101行!
int count = umDataSet.User.Rows.Count; // yep there there
umRow =(UserMetricsDataSet.UserRow)umds.User.Rows [101];

//允许双重检查
umTableAdapter.Fill(umDataSet.User);
int count = umds.UserMetris.Rows.Count; //呵呵! count == 1 ???


解决方案

我假设 umDataSet umds 相同。



如何?

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

或者如何扭转订单?根据DataTable中的更改, TableAdapter.Update()方法将更新发送回数据库。如果您先接受这些更改,则在每个DataTable行上重置 RowState ,所以没有找到发送回数据库的更新。



MSDN


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




  try 
{
umTableAdapter.Update(umDataSet.User) ;
umDataSet.User.AcceptChanges();
}
catch(Exception ex)
{
// TableAdapter.Update()可以抛出异常
}
/ pre>

We used the VS2010 data connection design wizard to define a connection to a SQLCe database with just one table (database="UserMetrics" table="User"). Try as we might the update doesn't seem to hold, I've been through posts on SO and MSDN but can't see the glaring error...

        //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 ???

解决方案

I'm assuming umDataSet is the same thing as umds.

What about?

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

Or what about reversing the order? The TableAdapter.Update() method sends updates back to the database based on the changes in the DataTable. If you accept the changes first, then the RowState is reset on each DataTable row, so there are no updates found to send back to the database.

From MSDN:

In order to send the modified data to a database, you call the Update method of a TableAdapter. The adapter's Update method will update a single data table and execute the correct command (INSERT, UPDATE, or DELETE) based on the RowState of each data row in the table.

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

这篇关于使用数据集和表适配器更新对SQLCe 3.5不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆