正在做一个系统,里面有个订单表,客户要是是,当一个订单生成后(即是下订后),一个月内没有被确认,系统就要自动把它更改为睡眠状态,要求系统自动计算时间,自动完成。请问各位这种问题怎么解决呢?数据库是否有什么地方可以设置每隔一段时间就可以自动调用我写的存储过程来更新呢?要是没有,又有什么解决方法呢?
订单表时有个OrderDate,它记录下订时间,但是有什么办法每天由系统自动更新这张表呢?
谢谢。

解决方案 »

  1.   

    以下是一个实际运用Timer控件的例子,你可进行参考.
    由于定时事件是全局性事件,所以,一般放在Application_Start内当系统启动即开始执行,或放在session_start事件里面针对每个用户进行操作.
    /// <summary>
    /// 系统开启事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Application_Start(Object sender, EventArgs e)
    {
      //创建一个新的Timer实例
        System.Timers.Timer sysTimer = new System.Timers.Timer();      
        //将sysTimer_Elapsed指定为计时器的 Elapsed 事件处理程序 
        sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
      //半天执行一次,此单位为毫秒
        sysTimer.Interval = 60*60*12*1000;
        sysTimer.AutoReset = true;
        sysTimer.Enabled = true;
    }
    /// <summary>
    /// 定时器事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
      //此处即可填写您需要执行的代码.
    //系统将根据设定的时间,周而复始地重复执行此代码
    }
      

  2.   

    这样会不会占用太多的CPU资源呀?
      

  3.   

    以编程方式创建 Elapsed 事件的处理程序 创建 Timer 组件的实例并为它设置必要的属性使之可以运行。有关更多信息,请参见创建基于服务器的计时器实例。 
    使用 AddHandler 方法为您的组件创建事件处理程序,该组件将在引发 Elapsed 事件时调用 MyTimer_Elapsed。您的代码应类似于: 
    ' Visual Basic
    AddHandler myTimer.Elapsed, New _
       System.Timers.ElapsedEventHandler(AddressOf Me.myTimer_Elapsed)// C#
    myTimer.Elapsed += 
       new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
    注意   有关该语法的更多信息,请参见 Windows 窗体中的事件处理。 
    创建 myTimer_Elapsed 过程并定义处理事件的代码。 
    ' Visual Basic
    Private Sub myTimer_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
       System.Windows.Forms.MessageBox.Show("Elapsed!", _
          "Timer Event Raised!")
    End Sub// C#
    private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
       System.Windows.Forms.MessageBox.Show("Elapsed!", 
          "Timer Event Raised!");
    }
    下列代码显示如何创建一个 Timer 组件,该组件每 5 秒钟引发一个事件并显示一个对该事件提出警告的消息框:' Visual Basic
    Private Sub CreateTimer()
       Dim Timer1 As New System.Timers.Timer()
       Timer1.Interval = 5000
       Timer1.Enabled = True
       AddHandler Timer1.Elapsed, _
          New System.Timers.ElapsedEventHandler(AddressOf Me.Timer1_Elapsed)
    End SubPrivate Sub Timer1_Elapsed(ByVal sender As System.Object, _
       ByVal e As System.Timers.ElapsedEventArgs)
       System.Windows.Forms.MessageBox.Show("Elapsed!", "Timer Event Raised!")
    End Sub// C#
    private void CreateTimer()
    {
       System.Timers.Timer Timer1 = new System.Timers.Timer();
       Timer1.Enabled = true;
       Timer1.Interval = 5000;
       Timer1.Elapsed += 
          new System.Timers.ElapsedEventHandler(Timer1_Elapsed);
    }private void Timer1_Elapsed(object sender, 
    System.Timers.ElapsedEventArgs e)
    {
       System.Windows.Forms.MessageBox.Show("Elapsed!", 
          "Timer Event Raised!");