打印本文 打印本文 关闭窗口 关闭窗口
ADO.NET中的多数据表操作浅析—修改
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2174  更新时间:2009/4/23 10:47:42  文章录入:mintao  责任编辑:mintao
.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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口