我的控制台程序是用来做监控数据库的..
一旦发现符合条件的数据就进行操作...(数据是一直在增加的)
我现在是如果没有可操作数据,用timer控制,每隔5秒执行一次数据库查询..
如果有就设置timer的停止执行,然后方法体内调用方法一直循环操作,中间不间隔...
直到执行至没有可操作的数据.再次打开timer,监控....
可惜不知道为什么,运行exe之后,一段时间是没事的,有时候一个白天都没有问题..
第二天早上,就报错了,程序遇到未知错误需要关闭..
我现在是每个几分钟然程序自己重新加载一次,关闭旧的程序..
这样倒是可以连续开3~4天左右..然后又报同样的错误..
这个问题困扰了我好久啦,怎么会呢?

解决方案 »

  1.   

    可能你没有明白我的意思,我是在只没有任何可操作的数据的时候才定时5秒检查一次..
    一旦发现数据,就停止timer定时执行,自己循环了..
    执行完后如果发现没有数据可操作了,定时才再次启动..
      

  2.   

    我把代码贴出来!!!
      static int i = 0;
      private static System.Timers.Timer stimer = null; 
    static void Main(string[] args)
    {
              SetTimeout();
    }
      
      private static void doUpdate()
            {
                Record record = GetData.getNotdoData();
                if (record != null)
                {
                    if (stimer.Enabled)
                        stimer.Enabled = false;
                 
                    try
                    {
                        //执行的内容
                        doUpdate();
                    }
                    catch (Exception ex)
                    {
                        stimer.Enabled = true;
                        Console.ReadKey();
                    }
                }
                else
                {
    //现在是加了这段才能多跑几天的
                    if (i >= 6)
                    {
                        i = 0;
                        System.Windows.Forms.Application.Restart();
                        Environment.Exit(0);                }                if (!stimer.Enabled)
                        stimer.Enabled = true;
                    Console.ReadKey();
                }
            }
            public static void SetTimeout()
            {
                try
                {
                    stimer = new System.Timers.Timer();
                    stimer.Elapsed += new ElapsedEventHandler(godoUpdate);
                    stimer.Interval = 5000;
                    stimer.Enabled = true;
                }
                catch
                {
                    Console.WriteLine("计时器异常...");
                }
            }        public static void godoUpdate(object sender, System.Timers.ElapsedEventArgs e)
            {
                doUpdate();
            }
      

  3.   

    写个windows服务吧,这样更好,网上有例子。
      

  4.   

    服务当然可以操作数据库。另外,建议catch下详细的Excecption,这样比较有方向一点
      

  5.   

    我程序内部都有做异常处理的,而且会把异常全部记录下来,但是我根本就是程序突然就报错误..
    您说的连接数据库需要释放么?
    因为我是需要连续不断的执行查询数据库的!
    所以没有关闭数据库,是不是需要在重启控制台之前先
    conn.Close();
    conn.Dispose();
    我的连接数据库语句是这样的!在一个类里面调用的
     private static SqlConnection connection;
            public static SqlConnection Connection
            {
                get
                {               // string connectionString = ""
                    if (connection == null)
                    {
                        connection = new SqlConnection(connectionString);
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Closed)
                    {
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Broken)
                    {
                        connection.Close();
                        connection.Open();
                    }
                    return connection;
                }