none
订单保留期限问题 RRS feed

  • 问题

  • 一个产品。订购后。 订货保留期限 比如说是5天。。我订货的时候有个订货时间。如果5天没付款。这个订单自动删除 。这个怎么实现。包括sql 。我初次想法是到时间删除,在页面上写代码,但是在页面上写代码,必须要打开这个页才执行,感觉这个不合理吧。我也不知道怎么合理。还请大家指教
    不用羡慕----那,只是个传说!
    2009年4月15日 3:34

答案

  • 其实,订单过了5天恰好我没打开这个页,也是可以的,既然没有人访问,则你的数据业务就没有意义了(非 web程序提供数据的场合除外),因为数据是给人看的,只要一访问,就去做一个处理,用户看到的永远都是经过处理的数据。你仔细想想是不是这个道理。

    如果页面显示的地方很多,则用我给你贴的多线程方法,只要访问一次,以后无需客户端访问就能处理数据的更新。

    另外也可以使用数据库本身的功能,如计划任务实现,windows服务实现也是可以的,但不适合虚拟主机的环境。




    孟宪会
    • 已标记为答案 极度 2009年4月16日 3:01
    2009年4月16日 1:17
    版主
  • 你可以用服务端多线程,就是孟老师说的只要访问一次,以后无需客户端访问就能处理数据的更新。
    我给你回的第一个帖就是服务端多线程实现,希望对你有帮助
    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年4月16日 3:01
    2009年4月16日 1:36
    版主

全部回复

  • 在 Application_Start 中开启一个线程专门处理你的业务,比如 一天 执行一次

    Global.asax 文件添写以下代码

     void Application_Start(object sender, EventArgs e) 
        {
            System.Threading.Thread fThread = new System.Threading.Thread(new System.Threading.ThreadStart(DoSth));
            fThread.Start();
        }
        
        private void DoSth()
        {
            while (true)
            {
                try
                {
    // 你要处理期限的代码
                }
                catch
                {
                    //
                }

                System.Threading.Thread.Sleep(600000); // <- 一小时执行一次
            }
        }

    知识改变命运,奋斗成就人生!
    2009年4月15日 3:40
    版主
  • 正常软件产品业务数据中  很少会要求删除  

    你在select 的时候过滤过期条件 不显示就可以了


    过期的记录  可以做每月一次的集中维护性删除 
    工作突然有点忙 嘿嘿
    2009年4月15日 4:02
  • 哦。。我的意思是也不删除,但是我不知道怎么 比对 订购时间后5天次订单就过期。也就是说过期了就不再订单表里,在过期表单里。。这样
    不用羡慕----那,只是个传说!
    2009年4月15日 4:13
  • 那就在订单表中添加一个字段来标明是否已过期就好了


    知识改变命运,奋斗成就人生!
    2009年4月15日 4:15
    版主
  • x.x.y :

    我是说 我订购的时候 比如今天 2009-04-15号 从今天到5天后。没付款就过期。。数据库增加一个字段我知道。。我意思是怎么比对 从今天到5天后的。。还有我希望打开订单表后执行。而是 没一个订单从下订单时间到5天后没付款就过期
    不用羡慕----那,只是个传说!
    2009年4月15日 4:18
  • 不好意思,刚才没有理解正确, 日期比较可以用 dateadd(dd, 5, 订单日期) > getdate()
    知识改变命运,奋斗成就人生!
    2009年4月15日 4:29
    版主
  • x.x.y :谢谢 这个  dateadd(dd, 5, 订单日期) > getdate()  我记住拉。。我还有个问题。。
    就是 执行这个 操作是需要打开某个页才执行的。能不能。即便我不打开网页查看。。也执行。也就是说。 系统默默运行。不知道我这么表达对不对。。。订单时间很杂,有今天的昨天的,前天的,一旦到5天就过期
    不用羡慕----那,只是个传说!
    2009年4月15日 4:39
  • 也可以采用服务器端的多线程来执行,或者写一个服务程序来自动执行,无需访问页面。
    参考
    http://blog.csdn.net/net_lover/archive/2003/08/27/6943.aspx
    孟宪会
    2009年4月15日 4:56
    版主
  • Windows 服务程序就是干这种事情的
    知识改变命运,奋斗成就人生!
    2009年4月15日 5:04
    版主
  • 自动过期  就不存在默默运行问题



    默默运行不推荐


    非常不推荐用iis 挂起的线程   一个.net线程就是1mb内存  以及若干性能的轮询



    可以通过.net windows service 做你说的程序  但是仅仅一个过期就要动用这样重的解决方案仍然是劳命伤财

    工作突然有点忙 嘿嘿
    2009年4月15日 5:42
  • 有点乱。。。我在问一个问题,不同的订单时间不同,那一条datediff 语句怎么判断很多不同的订单5天后过期


    X.X.Y select dateadd(day, 5,'2009.04.20') > getdate()    这条语句是这么执行的吗
    不用羡慕----那,只是个传说!
    2009年4月15日 7:08
  • Select * from 订单表
    Where 订单日期 < dateadd(day, -5, getdate())  --<  5前天
    知识改变命运,奋斗成就人生!
    2009年4月15日 7:16
    版主
  • 一个产品。订购后。 订货保留期限 比如说是5天。。我订货的时候有个订货时间。如果5天没付款。这个订单自动删除 。这个怎么实现。包括sql 。我初次想法是到时间删除,在页面上写代码,但是在页面上写代码,必须要打开这个页才执行,感觉这个不合理吧。我也不知道怎么合理。还请大家指教
    不用羡慕----那,只是个传说!

    如果是SQLServer数据库,很好办,用JOB就可以了。
    如果是ACCESS数据库,那没办法,就写在页面里了,性能方面没有多在影响的,放心。因为既然是ACCESS,我想一般是虚拟主机,用WINDOWS程序实现不太可能。
    tellov
    2009年4月15日 8:00
  • 是sql 数据库. 现在就是执行这个我很迷糊..不打开页面 系统默默执行就像时间一秒一秒的走即便不开机也是走的..因为要是在页面实现.只有打开这个页面才执行.如果 一个订单过了5天恰好我没打开这个页 岂不是没有执行..这个机制我搞不懂啊


    不用羡慕----那,只是个传说!
    2009年4月16日 1:07
  • SQL Job 和 Windows Service 做你现在想要的功能的, 不必登陆界面,只要开机不用登陆Windows程序也会照样执行, 建议你使用 Sql Job ,详细你可以查查帮助


    知识改变命运,奋斗成就人生!
    2009年4月16日 1:11
    版主
  • 其实,订单过了5天恰好我没打开这个页,也是可以的,既然没有人访问,则你的数据业务就没有意义了(非 web程序提供数据的场合除外),因为数据是给人看的,只要一访问,就去做一个处理,用户看到的永远都是经过处理的数据。你仔细想想是不是这个道理。

    如果页面显示的地方很多,则用我给你贴的多线程方法,只要访问一次,以后无需客户端访问就能处理数据的更新。

    另外也可以使用数据库本身的功能,如计划任务实现,windows服务实现也是可以的,但不适合虚拟主机的环境。




    孟宪会
    • 已标记为答案 极度 2009年4月16日 3:01
    2009年4月16日 1:17
    版主
  • 恩 谢谢 孟老师和 X.X.y 因为我做的这个网站在线订单只是一个辅助模块,访问不是很大.所以一访问才执行肯定是不行的,孟老师你说的sql本身的功能 是X.X.y说的这个 Sql Job  我的空间是虚拟主机. windows服务实现 这个在虚拟主机不方便吧.
    不用羡慕----那,只是个传说!
    2009年4月16日 1:33
  • 你可以用服务端多线程,就是孟老师说的只要访问一次,以后无需客户端访问就能处理数据的更新。
    我给你回的第一个帖就是服务端多线程实现,希望对你有帮助
    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年4月16日 3:01
    2009年4月16日 1:36
    版主
  • 好的 谢谢 2位老师..我自己去测试测试..
    不用羡慕----那,只是个传说!
    2009年4月16日 3:01
  • 最好不要用服务端多线程,那真的是毒药
    工作突然有点忙 嘿嘿
    2009年4月16日 3:56
  • 为什么呢?


    知识改变命运,奋斗成就人生!
    2009年4月16日 3:57
    版主
  • 最好不要用服务端多线程,那真的是毒药
    工作突然有点忙 嘿嘿

    有点赞同,我曾经就用多线程完整的静态页生成。有些东西你无法预料
    tellov
    2009年4月16日 16:45