| .Close();
???? }
}
结合上面的两个方法我们可想到调用Web Service有更合理的方法来完成。
(3)使用事务
public void UpdateCustomerOrdersWithTransaction(DataSet ds)
{
???? SqlTransaction trans = null;
???? try
???? {???
???????? _conn.Open();
???????? trans = _conn.BeginTransaction();
???????? _customerDataAdapter.DeleteCommand.Transaction = trans;
???????? _customerDataAdapter.InsertCommand.Transaction = trans;
???????? _customerDataAdapter.UpdateCommand.Transaction = trans;
???????? _orderDataAdapter.DeleteCommand.Transaction = trans;
???????? _orderDataAdapter.InsertCommand.Transaction = trans;
???????? _orderDataAdapter.UpdateCommand.Transaction = trans;
???? _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));?
???? ???? trans.Commit();
???? }
???? catch(Exception ex)
???? {
???????? trans.Rollback();
???????? throw new Exception("更新数据出错",ex);
???? }
???? finally
???? {
???????? if(_conn.State != ConnectionState.Closed)
????????????? _conn.Close();
???? }
}
最后让我们来看看窗体的按钮更新事件的代码:
private void buttonUpdate_Click(object sender, System.EventArgs e)
{
????????????? //提交编辑数据
???? this.BindingContext[this._ds].EndCurrentEdit();
????
???? if(radioButtonRef.Checked == true)//引用方式更新
???????? _dataAccess.UpdateCustomerOrders((DataSet)_ds);
???? else if(radioButtonTrans.Checked == true)//启用事务更新数据表
???????? _dataAccess.UpdateCustomerOrdersWithTransaction((DataSet)_ds);
???? else
???? {
???????? DatasetOrders changedData =? (DatasetOrders)_ds.GetChanges();
???????? if(radioButtonWeb.Checked == true)//Web服务的更正更新
???????? {?????????????????????
????????????? _dataAccess.UpdateCustomerOrders((DataSet)changedData);
???????? }
???????? else//创建副本合并方式更新
???????? {?????????????????
????????????? _dataAccess.UpdateCustomerOrders(changedData);
???????? }
???????? //去除订单表中添加的虚拟行
???????? foreach(DataRow row in _ds.Orders.Select("","",DataViewRowState.Added))
????????????? _ds.Orders.RemoveOrdersRow((DatasetOrders.OrdersRow)row);
???????? //去除客户表中添加的虚拟行
???????? foreach(DataRow row in _ds.Customers.Select("","",DataViewRowState.Added))
????????????? _ds.Customers.RemoveCustomersRow((DatasetOrders.CustomersRow)row);
上一页 [1] [2] [3] [4] 下一页 |