| (1)实现用获取修改过的DataSet的副本子集来更新数据的方法。
这也是调用Xml Web Service更新数据的常用方法,先来看第一个版本,子集的获取通过DataSet.GetChangs方法来完成。
//使用数据集子集更新数据
public void UpdateCustomerOrders(DatasetOrders ds)
{????????????
???? DataSet dsModified = ds.GetChanges(DataRowState.Modified);//获取修改过的行
???? DataSet dsDeleted = ds.GetChanges(DataRowState.Deleted);//获取标记为删除的行
???? DataSet dsAdded = ds.GetChanges(DataRowState.Added);//获取增加的行
???? try
???? {???
???????? _conn.Open();//先添加客户表数据,再添加订单表数据
???????? if(dsAdded != null)
???????? {
????????????? _customerDataAdapter.Update(dsAdded,"Customers");
????????????? _orderDataAdapter.Update(dsAdded,"Orders");
????????????? ds.Merge(dsAdded);
???????? }
???????? if(dsModified != null)//更新数据表
???????? {
???????? ???? _customerDataAdapter.Update(dsModified,"Customers");
????????????? _orderDataAdapter.Update(dsModified,"Orders");
????????????? ds.Merge(dsModified);
???????? }
???????? if(dsDeleted != null)//先删除订单表数据,再删除客户表数据
???????? {
????????????? _orderDataAdapter.Update(dsDeleted,"Orders");
????????????? _customerDataAdapter.Update(dsDeleted,"Customers");
????????????? ds.Merge(dsDeleted);
???????? }?????????????????
???? }
???? catch(Exception ex)
???? {
???????? throw new Exception("更新数据出错",ex);
???? }
???? finally
???? {
???????? if(_conn.State != ConnectionState.Closed)
????????????? _conn.Close();
???? }
}
上面的方法看上去比较清晰,不过效率不会很高,至少中间创建了三个DataSet,然后又进行了多次合并。
(2)另一方法就是引用更新,不创建副本。
相对来说性能会高许多,但是如果用在Web服务上传输的数据量会更大(可以结合两个方法进行改进)。具体的实现就是通过DataTable.Select方法选择行状态来实现。
//引用方式更新数据
public void UpdateCustomerOrders(DataSet ds)
{
???? try
???? {???
???????? _conn.Open();
???????? //先添加客户表数据,再添加订单表数据 ???? _customerDataAdapter.Update(ds.Tables["Customers"].Select("","",DataViewRowState.Added));
???? _orderDataAdapter.Update(ds.Tables["Orders"].Select("","",DataViewRowState.Added));
???? //更新数据表
???? _customerDataAdapter.Update(ds.Tables["Customers"].Select("","",DataViewRowState.ModifiedCurrent));
???? _orderDataAdapter.Update(ds.Tables["Orders"].Select("","",DataViewRowState.ModifiedCurrent));
//先删除订单表数据,再删除客户表数据
???? _orderDataAdapter.Update(ds.Tables["Orders"].Select("","",DataViewRowState.Deleted));
???? _customerDataAdapter.Update(ds.Tables["Customers"].Select("","",DataViewRowState.Deleted));???????????
???? }
???? catch(Exception ex)
???? {
???????? throw new Exception("更新数据出错",ex);
???? }
???? finally
???? {
???????? if(_conn.State != ConnectionState.Closed)
????????????? _conn 上一页 [1] [2] [3] [4] 下一页 |