我们使用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 ???
答案 0 :(得分:1)
我假设umDataSet
与umds
相同。
怎么样?
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
}