当前位置:编程学习 > C#/ASP.NET >>

进度条(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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,