打印本文 打印本文 关闭窗口 关闭窗口
透过vs.net数据窗体向导看Ado.net
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1481  更新时间:2009/4/23 10:41:06  文章录入:mintao  责任编辑:mintao
p;   WindowsApplication1.MyDataSet objDataSetChanges = new WindowsApplication1.MyDataSet();

     // 停止当前的任何编辑。

     this.BindingContext[objMyDataSet,"Categories"].EndCurrentEdit();

     this.BindingContext[objMyDataSet,"Products"].EndCurrentEdit();

     // 获取对主数据集所做的更改。

     objDataSetChanges = ((WindowsApplication1.MyDataSet)(objMyDataSet.GetChanges()));

     // 检查是否做了任何更改。

     if ((objDataSetChanges != null))

     {

         try

         {

              // 需要做一些更改,所以尝试通过调用 update 方法

              // 和传递数据集以及任何参数来更新数据源。

              this.UpdateDataSource(objDataSetChanges);

              objMyDataSet.Merge(objDataSetChanges);

              objMyDataSet.AcceptChanges();

         }

         catch (System.Exception eUpdate)

         {

              // 在此处添加错误处理代码。

              throw eUpdate;

         }

         // 添加代码以检查返回的数据集中是否有任何可能已被

         // 推入到行对象错误中的错误。

     }

}

更新过程很经典,通过获取修改过的数据集更新子集提交到数据源完成更新动作,接着合并子集到原有数据集,顺便提一下,合并的过程是基于数据表主键来判断的。通过调用DataSet.AcceptChanges()方法提交自加载此 DataSet 或上次调用 AcceptChanges 以来对 DataSet 进行的所有更改。对应的就是Data.RejectChanges();回滚自创建 DataSet 以来或上次调用 DataSet.AcceptChanges 以来对 DataSet 进行的所有更改。

 

七.补充

对于数据的更新需要视程序环境而定,不能都通过获取子集再合并的方法,具体请看ADO.NET中的多数据表操作浅析—修改一文。也有人问起怎样实现这样的功能:在数据库中的某一个字段数据为0或1,而在程序显示上想让它显示为是或否,这里我认为最好不要在Sql语句上做文章,代替的方法就是使用Binding对象的Format 事件和Parse事件。Binding.Format 事件,当将某控件的属性绑定到某个数据值时发生。Binding.Parse 事件,在数据绑定控件的值更改时发生。还有可以通过BindingManagerBase.PositionChanged事件来设置各个按钮的状态。需要具体的例子可以看MSDN或《Ado.net Core Reference》一书。另外,使用Try{}catch (System.Exception ex){}还是要视情况而定,不能一味的全都通过Exception基类把什么都扑捉了,如果知道有可能会抛出什么类型的异常,还是越具体越好,造成的反面效果就是要写更多的代码。具体为什么要这么做可以看《Applied Microsoft.NET Framework Programming》一书。

上一页  [1] [2] 

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