WebService架构提交数据-生成仅包含修改了字段的数据表
作者:C/S框架网  发布日期:2011/05/21 18:04:54
  WebService架构提交数据-生成仅包含修改了字段的数据表

WebService架构提交数据-生成仅包含修改了字段的数据表


WebService架构提交数据



使用WebService架构开发的数据库应用软件不适合大批量上传和下载数据,不是技术不能实现,而是广域网络太娇情!因网速限制只能从技术上突破,优化上传和下载的数据是非常重要的工作,本文介绍如何优化上传的数据。


我们可以通过下面两点优化数据:


1. 压缩数据包


2. 上传仅包含修改了字段的数据表




下图展示生成仅包含修改了字段的数据表:




贴图图片


通过
FieldChangedsObserver对象管理一个DataTable,自动生成仅包含修改了数据的字段列表,这种机制有效避免了上传到未修改的数据到WebServer,节省带宽,提高效能。




示范程序截图:


贴图图片


贴图图片



FieldChangedObserver示范程序截图


贴图图片





C# Code:

private void btnSubmit_Click(object sender, EventArgs e)
{
   //生成仅包含修改了字段的数据
   DataSet ds = new DataSet();
   ds.Tables.Add(_master.ChangedFieldTable);
   ds.Tables.Add(_detail.ChangedFieldTable);
   
   //调用WebService层提交数据
   bool success = MyWebService.Submit(ds);
   
   if (success)
   MessageBox.Show("Submit data successfully!");
   else
   MessageBox.Show("An error occurred while submit data via webservice!");
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898



观察两个数据表:


C# Code:

//观察字段
_master = new FieldChangedObserver(ds.Tables[0], "SONO");
_detail = new FieldChangedObserver(ds.Tables[1], "ISID");




C# Code:

/// <summary>
/// 观察的数据表是否被用户修改数据
/// </summary>
public class FieldChangedObserver
{
   private DataTable _observedTable;//被观察的数据表
   private List<DataColumn> _changedColumns;//观察到已修改的栏位
   private string _primaryKeyFieldName;//主键
   
   /// <summary>
   /// 构造器
   /// </summary>
   /// <param name="observedTable">被观察的数据表</param>
   /// <param name="primaryKeyFieldName">主键</param>
   public FieldChangedObserver(DataTable observedTable, string primaryKeyFieldName)
   {
      _observedTable = observedTable;
      _changedColumns = new List<DataColumn>();
      _primaryKeyFieldName = primaryKeyFieldName;
      _observedTable.ColumnChanged = new DataColumnChangeEventHandler(_observedTable_ColumnChanged);
   }
   
   //当用户修改数据时触发的事件
   private void _observedTable_ColumnChanged(object sender, DataColumnChangeEventArgs e)
   {
      if (_changedColumns.IndexOf(e.Column) >= 0) return;
      _changedColumns.Add(e.Column);
   }
   
   /// <summary>
   /// 返回仅包含已修改栏位的数据表。
   /// </summary>
   public DataTable ChangedFieldTable
   {
      get
      {
         //获取用户已修改的数据
         DataTable changes = _observedTable.GetChanges();
         if (changes == null) return _observedTable.Clone();
         
         //删除未修改的栏位
         foreach (DataColumn column in _observedTable.Columns)
         {
            //不处理主键
            if (column.ColumnName.ToUpper() == _primaryKeyFieldName.ToUpper()) continue;
            
            //找到未修改的栏位则删除。
            if (_changedColumns.IndexOf(column) < 0)
            changes.Columns.Remove(column.ColumnName);
         }
         
         return changes;
      }
   }
   
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898



C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务




Source code free download!

点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇