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

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