进度条(ProgressBar)如何与sql命令有机结合
常常用到sql提取后台数据,或者保存比较大量的数据,如何做到利用ProgressBar体现真正的进度?比如一条sql命令,修改一批数据,这一批数据具体有多少无法确定,那么如何来确定ProgressBar目前的value的值呢? --------------------编程问答-------------------- 关注,帮你顶--------------------编程问答-------------------- 自己顶啊 --------------------编程问答-------------------- 谁能执行的查询真正的时间?就算同一条SQL,不同时候的执行,也会有不同执行时间。
使用一定的时间,进行重复的进度显示
--------------------编程问答-------------------- 把你的SQL写进存储过程中,然后在你的存储过程中每执行完一定的步骤就更新一张“进度表”,ProgressBar定时取这张进度表,做过一个时间较长的SQL,用的这种方法,但好象有点浪费系统资源。。。 --------------------编程问答-------------------- 以前我做过一个Socket连接状态的进度条,因为待测的远端链接状态永远是不可知的,所以这种活基本是无用功,其实只要保证界面的相应就可以了,没有必要做一个进度条 --------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 休息日人多,提一提 --------------------编程问答-------------------- 休息日人可不多~~
是不是要用多线程来做? --------------------编程问答-------------------- 当然要用多线程来做,正如 closetome 所说,没必要做精确的进度条实际上也做不到,只要有个一直在动的进度条让用户知道还在处理就行了,可参考 Windows 中的进度条设计 --------------------编程问答-------------------- Public Class frmBackUp
Inherits System.Windows.Forms.Form
Public WithEvents bkps As SQLDMO.Backup
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
Dim oSQLServer As New SQLDMO.SQLServer
Dim pathname As String
pathname = txtPath.Text
If txtPath.Text = "" Then
MsgBox("请选择备份文件存放的位置!", MsgBoxStyle.Information, "系统消息")
Else
Try
lblInfo.Visible = True
ProBarBackUp.Visible = True ' ProBarBackUp为进度条
oSQLServer.LoginSecure = False
oSQLServer.Connect("(local)", "sa", "123456") '连接服务器
Me.Cursor = Windows.Forms.Cursors.WaitCursor '鼠标形状
bkps = CreateObject("SQLDMO.Backup")
bkps.Database = "Truck" '指定需备份的数据库
bkps.Action = 0
bkps.Files = pathname + "\Truck.bak" '指定备份文件
bkps.Initialize = True
ProBarBackUp.Value = 0
ProBarBackUp.Maximum = 100
Me.Cursor = Windows.Forms.Cursors.Default()
Application.DoEvents()
Dim mouseCur As Cursor
Me.Cursor = Windows.Forms.Cursors.WaitCursor
bkps.SQLBackup(oSQLServer)
ProBarBackUp.Value = 100
Application.DoEvents()
bkps = Nothing
Me.Cursor = Windows.Forms.Cursors.Default()
If MsgBox("数据库备份完成", MsgBoxStyle.Information, "系统消息") = MsgBoxResult.OK Then
Me.Close()
End If
Catch ex As Exception
Throw New Exception("备份数据库失败!" + ex.Message)
Finally
oSQLServer.DisConnect()
End Try
End If
End Sub
Private Sub bkps_PercentComplete(ByVal Message As String, ByVal Percent As Integer) Handles bkps.PercentComplete
ProBarBackUp.Value = ProBarBackUp.Maximum * (Percent / 100)
End Sub
--------------------编程问答-------------------- 不知道这里有没有你想要的 先发给你看看吧 --------------------编程问答-------------------- 这个程序里面的进度条很精准的,我就是一直在纳闷他是怎么做到的, --------------------编程问答-------------------- 这个程序里面的进度条很精准的,我就是一直在纳闷他是怎么做到的
-------------------
有什么好纳闷的?SQLDMO.Backup.PercentComplete 事件通过委托传递 Percent 参数报告进程进度百分比,所以比较准确。但这是由 SQL Distributed Management Objects 提供支持的,只有少量操作可以,SQL 批处理怎么报告进度?
ps:SQL Server 2005 支持外部应用程序,也许可以实现,不过我没试过 --------------------编程问答-------------------- Private Sub bkps_PercentComplete(ByVal Message As String, ByVal Percent As Integer) Handles bkps.PercentComplete
ProBarBackUp.Value = ProBarBackUp.Maximum * (Percent / 100)
End Sub
这个事件
补充:.NET技术 , VB.NET