启动后如何停止执行dataAdapter.update
Posted
技术标签:
【中文标题】启动后如何停止执行dataAdapter.update【英文标题】:How to stop executing dataAdabter.update after starting 【发布时间】:2015-10-11 10:45:41 【问题描述】:我正在尝试使用DataAdapter.Update
在数据库中进行批量更新,并且用户可以选择取消操作。
问题:当用户点击取消按钮时如何停止更新操作?
我的代码::
Log("@@@@@ Saving BMPImages paths to the database @@@@@")
objCommandBuilder = New SqlCommandBuilder(daImages)
SavingImageObj.MyProgressBar.Maximum = tblImages.GetChanges.Rows.Count
AddHandler tblImages.RowChanged, New DataRowChangeEventHandler(AddressOf tblImages_changed)
daImages.Update(dsMAP, "BMPImages")
这是 RowChanged 处理程序::
Private Sub tblImages_changed(ByVal sender As Object, ByVal e As System.Data.DataRowChangeEventArgs)
'Increment progress bar
SavingImageObj.ThreadTask()
If SkipFraming = True Then
' Here I should do something to stop the daImages.Update
' from continuing to execute
End If
End Sub
我正在设置一个标志 [SkipFraming] 指示我应该在单击取消按钮时停止操作。
【问题讨论】:
How to cancel a long-running Database operation?的可能重复 我认为这个问题是后台工作人员的问题(线程问题)不像我的情况 【参考方案1】:好的,我找到了解决问题的方法:
我应该为dataAdapter.RowUdpated
而不是dataTable.RowChanged
创建一个事件处理程序,以便能够停止更新[这只是一个状态更新=D(args.Status = UpdateStatus.SkipAllRemainingRows )]
以下是代码示例:
' Reset Updating progress counter
UpdatingProgressCounter = 0
'Open connection to update database
objConn.Open()
'Update database
Log("@@@@@ Saving BMPImages paths to the database @@@@@")
objCommandBuilder = New SqlCommandBuilder(daImages)
SavingImageObj.MyProgressBar.Maximum = tblImages.GetChanges.Rows.Count
AddHandler daImages.RowUpdated, New SqlRowUpdatedEventHandler(AddressOf daImages_updated)
Log("========== Total Rows to be updated = [" & tblImages.GetChanges.Rows.Count & "] ==========")
daImages.Update(dsMAP, "BMPImages")
'Close database connection
objConn.Close()
Private Sub daImages_updated(ByVal sender As Object, ByVal args As System.Data.SqlClient.SqlRowUpdatedEventArgs)
'Increment progress bar
SavingImageObj.ThreadTask()
' Increment progress counter
UpdatingProgressCounter += 1
'Give control on UI
If UpdatingProgressCounter Mod 10 = 0 Then
Application.DoEvents()
SkipFraming = True 'For Testing
End If
' Skip updating remaining rows in case of cancelling the framing
If SkipFraming = True Then
Log("@@@@@@@@@@@@@@@@@ Skipping remaining rows @@@@@@@@@@@@@@@@@")
args.Status = UpdateStatus.SkipAllRemainingRows
End If
End Sub
希望对有类似情况的朋友有所帮助。
【讨论】:
以上是关于启动后如何停止执行dataAdapter.update的主要内容,如果未能解决你的问题,请参考以下文章
在我调用 r.exec 以启动 cmd 提示符后如何停止执行我的 java 程序
在 Python 中,如何执行 .exe 文件并在 n 秒后停止它? [复制]