gpt4 book ai didi

sql - .NET - 如何将 BackgroundWorker 与 CMD.executenonquery 一起使用

转载 作者:行者123 更新时间:2023-12-02 03:41:22 26 4
gpt4 key购买 nike

在我的 Windows 窗体中,我有一个对大约 2,000,000 行有效的查询。执行查询会卡住界面,大约需要 60 秒才能完成。

有什么方法可以放置一个进度条来通知用户任务正在进行中?

我是多线程的新手,所以任何帮助将不胜感激。

这是需要时间的代码:

在 cmd.executenonquery() 处卡住断点

Public Sub InsertNumberswithMsgID(ByVal messageID As Integer, ByVal tableName As String) 

Dim cmd As SqlCommand = Nothing

Try
cmd = New SqlCommand(("dbo.[InsertNumbers_withMsgID]"), cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@tablename", tableName)
cmd.Parameters.AddWithValue("@msgid", messageID)
cmd.CommandTimeout = 6000
If Not cn Is Nothing And cn.State = ConnectionState.Closed Then cn.Open()
cmd.ExecuteNonQuery()

Catch ex As SqlException

Catch ex As Exception

Finally
If Not cn Is Nothing And cn.State = ConnectionState.Open Then cn.Close()
If Not cmd Is Nothing Then cmd.Dispose()
End Try

End Function

最佳答案

article Arman 提到这确实是一个很好的起点 - 将其用作代码的骨架,并将函数调用放在 sleep 命令所在的位置。

但是在您提供的示例中,实际上并没有一种方法可以更新进度条中的进度,因为存储过程一步完成所有操作并在完成时返回。

因此,通过这种方式,您可以在执行前显示 0%,然后在执行完成后显示 100%。

或者您必须更改存储过程以便可以更细粒度地调用它,即每次处理 10% 的行,然后返回 - 这将允许您更新进度条(只有在您被允许时才有效将其拆分为要插入的多个行 block - 如果您需要在一个事务中将它们放在一起,那么您当然不能这样做)。

或者,您可以考虑使用进度条的跑马灯样式,如所述here .在这种情况下,您根本不需要更新百分比值。

关于sql - .NET - 如何将 BackgroundWorker 与 CMD.executenonquery 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com