利用ADO.NET RowUpdated添加删除事件处理程序
创始人
2024-06-11 14:51:18
0

ADO.NET RowUpdated还是比较常用的,于是我研究了一下,在这里拿出来和大家分享一下,希望对大家有用。在数据源中处理对 DataSet 中某行的任何更新之前,将引发了RowUpdated。在数据源中处理对 DataSet 中某行的任何更新之后,将引发 RowUpdated。

因此,可以使用 RowUpdating 执行下列操作:在更新行为发生之前对其进行修改,在更新将发生时提供附加处理,保留对已更新行的引用,取消当前更新并将其安排在以后进行批处理,等等。RowUpdated 对于响应更新期间发生的错误和异常是非常有用的。 您可以向 DataSet 以及重试逻辑等添加错误信息。

传递给 RowUpdating 和 RowUpdated 事件的 RowUpdatingEventArgs 和 RowUpdatedEventArgs 参数包括: Command 属性,它引用用来执行更新的 Command 对象;Row 属性,它引用包含更新信息的 DataRow 对象;StatementType 属性,它指示所执行的更新类型;TableMapping(如果适用);以及操作的 Status。

#T#可以使用 Status 属性来确定在执行该操作期间是否发生了错误;如果需要,还可以使用该属性来控制对当前行和结果行所执行的操作。 当该事件发生时,Status 属性将为 Continue 或 ErrorsOccurred。 下表演示为了控制更新过程中的后继操作,可以将 Status 属性设置为的值。如果将 Status 属性设置为 ErrorsOccurred,则会引发异常。 您可以通过将 Errors 属性设置为所需异常来控制所引发的异常。 如果使用 Status 的其他值之一,则可防止引发异常。

也可以使用 ContinueUpdateOnError 属性为更新的行处理错误。 如果 DataAdapter.ContinueUpdateOnError 为 true,那么当行的更新导致引发异常时,该异常的文本被放入特定行的 RowError 信息中,并且处理将会继续而不会引发异常。 这使您能够在 Update 完成时对错误作出响应;与此相反的是ADO.NET RowUpdated事件,它使您能够在遇到错误时响应错误。

以下代码示例显示如何添加和移除事件处理程序。 RowUpdating 事件处理程序编写带有时间戳的所有已删除记录的日志。ADO.NET RowUpdated事件处理程序将错误信息添加到 DataSet 中行的 RowError 属性、取消显示异常,并继续处理(镜像 ContinueUpdateOnError = true 的行为)。

  1. ' Assumes that connection is a valid SqlConnection object.  
  2. Dim custAdapter As SqlDataAdapter = New SqlDataAdapter( _  
  3. "SELECT CustomerID, CompanyName FROM Customers", connection)  
  4.  
  5. ' Add handlers.  
  6. AddHandler custAdapter.RowUpdating, New SqlRowUpdatingEventHandler( _  
  7. AddressOf OnRowUpdating)  
  8. AddHandler custAdapter.RowUpdated, New SqlRowUpdatedEventHandler(  
  9. AddressOf OnRowUpdated)  
  10.  
  11. ' Set DataAdapter command properties, fill DataSet, and modify DataSet.  
  12.  
  13. custAdapter.Update(custDS, "Customers")  
  14.  
  15. ' Remove handlers.  
  16. RemoveHandler custAdapter.RowUpdating, _  
  17. New SqlRowUpdatingEventHandler(AddressOf OnRowUpdating)  
  18. RemoveHandler custAdapter.RowUpdated, _  
  19. New SqlRowUpdatedEventHandler(AddressOf OnRowUpdated)  
  20.  
  21. Private Shared Sub OnRowUpdating(sender As Object, _  
  22. args As SqlRowUpdatingEventArgs)  
  23. If args.StatementType = StatementType.Delete Then  
  24. Dim tw As System.IO.TextWriter = _ 
  25. System.IO.File.AppendText("Deletes.log")  
  26. tw.WriteLine( _  
  27. "{0}: Customer {1} Deleted.", DateTime.Now, args.Row(_  
  28. "CustomerID", DataRowVersion.Original))  
  29. tw.Close()  
  30. End If  
  31. End Sub  
  32.  
  33. Private Shared Sub OnRowUpdated( _  
  34. sender As Object, args As SqlRowUpdatedEventArgs)  
  35. If args.Status = UpdateStatus.ErrorsOccurred  
  36. args.Status = UpdateStatus.SkipCurrentRow  
  37. argsargs.Row.RowError = args.Errors.Message  
  38. End If  
  39. End Sub 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...