做一个实时监控程序,在C# winfrom下,目前想的方案是想利用datagridview实时显示SQL SERVER远程数据库信息,求问如何实现?有没有相关的实例代码,参考下。多谢各位大侠了!

解决方案 »

  1.   

    sqlserver的话,就引入Microsoft.SqlServer.Smo.dll,它帮你快速展示所有数据库结构和修改,数据库版本问题都不用考虑了。(注:SQLSERVER2000和2005的获取数据库结构方法是不同的)
      

  2.   

    楼上没有理解lz信息吧,别个要的是定时显示数据库数据信息,可以用一个后台线程或是用BackgroundWorker常用属性
    1.CancellationPending
    指示应用程序是否已请求取消后台操作。
    只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true。
    2.WorkerSupportsCancellation
    指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。3.WorkerReportsProgress
    指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。
    常用事件
    1.DoWork
    调用 RunWorkerAsync 方法时发生。2.RunWorkerCompleted
    后台操作已完成、被取消或引发异常时发生(操作完成时)。
    3.ProgressChanged
    调用 ReportProgress(bw.ReportProgress(value,state);) 方法时发生。
    在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
    例子:  #region 加载事件
            private void Form1_Load(object sender, EventArgs e)
            {
                backgroundWorker1.WorkerReportsProgress = true;//是否在异步操作里报告进度
                backgroundWorker1.WorkerSupportsCancellation = true; //是否可以取消这个异步操作
            }
            #endregion        //开始backgroundworker异步处理
            private void button1_Click(object sender, EventArgs e)
            {
                backgroundWorker1.RunWorkerAsync(20);//
            }
            int index = 0;
            //backgroundworker异步要调用的方法
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                try
                {
                    BackgroundWorker bw = (BackgroundWorker)sender;
                    int count = Convert.ToInt32(e.Argument);//count为20                for (int i = 0; i < count; i++)
                    {
                        if (bw.CancellationPending)//bw.CancellationPending最后一次调用BackgroundWorker的方法是RunWorkerAsync(falser)还是CancelAsync(true),
                        {
                            return;
                        }
                        index++;
                        Thread.Sleep(1000);
                        bw.ReportProgress(index, e.Cancel);
                    }                e.Result = "成功";
                }
                catch (Exception)
                {
                }        }        //backgroundworker异步处理返回的进度
            private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                this.label1.Text = e.ProgressPercentage.ToString();
            }        //backgroundworker异步处理完成过后的事件
            private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //  MessageBox.Show(e.Error.Message);            MessageBox.Show(e.Result.ToString());
            }
            //取消backgroundworker异步处理
            private void button2_Click(object sender, EventArgs e)
            {
                backgroundWorker1.CancelAsync();
            }代码如下
      

  3.   

    常用属性
    1.CancellationPending
    指示应用程序是否已请求取消后台操作。
    只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true。
    2.WorkerSupportsCancellation
    指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。3.WorkerReportsProgress
    指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。
    常用事件
    1.DoWork
    调用 RunWorkerAsync 方法时发生。2.RunWorkerCompleted
    后台操作已完成、被取消或引发异常时发生(操作完成时)。
    3.ProgressChanged
    调用 ReportProgress(bw.ReportProgress(value,state);) 方法时发生。
    在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
    例子:  #region 加载事件        private void Form1_Load(object sender, EventArgs e)
            {
                backgroundWorker1.WorkerReportsProgress = true;//是否在异步操作里报告进度
                backgroundWorker1.WorkerSupportsCancellation = true; //是否可以取消这个异步操作
            }
            #endregion        //开始backgroundworker异步处理
            private void button1_Click(object sender, EventArgs e)
            {
                backgroundWorker1.RunWorkerAsync(20);//
            }
            int index = 0;
            //backgroundworker异步要调用的方法
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                try
                {
                    BackgroundWorker bw = (BackgroundWorker)sender;
                    int count = Convert.ToInt32(e.Argument);//count为20                for (int i = 0; i < count; i++)
                    {
                        if (bw.CancellationPending)//bw.CancellationPending最后一次调用BackgroundWorker的方法是RunWorkerAsync(falser)还是CancelAsync(true),
                        {
                            return;
                        }
                        index++;
                        Thread.Sleep(1000);
                        bw.ReportProgress(index, e.Cancel);
                    }                e.Result = "成功";
                }
                catch (Exception)
                {
                }        }        //backgroundworker异步处理返回的进度
            private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                this.label1.Text = e.ProgressPercentage.ToString();
            }        //backgroundworker异步处理完成过后的事件
            private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //  MessageBox.Show(e.Error.Message);            MessageBox.Show(e.Result.ToString());
            }
            //取消backgroundworker异步处理
            private void button2_Click(object sender, EventArgs e)
            {
                backgroundWorker1.CancelAsync();
            }
      

  4.   

    Re:bdmh
    有没有用TIMER实时显示数据库数据的代码,我尝试过用TIMER控件,没成功!谢谢!
      

  5.   

    Re:lijun822205
    非常感谢你!你的代码很详细,但是我不是很理解,该如何运用到实时显示数据库中,能否再细说下,麻烦了!
      

  6.   

    直接用Timer控件,在Load事件中写,较好
      

  7.   


    private void FrmThawStateDisplay_Load(object sender, EventArgs e)
            {
    //显示数据库信息
                this.timer1.Interval = 1000;
                this.timer1.Start();
            } private void timer1_Tick(object sender, EventArgs e)
            {
    //判断数据库信息是否变动,变动则重新显示数据库信息
    if(变动)
    {
    }
            }