请大家帮我检查这个windows服务程序,很不稳定。

时间:2021-02-23 20:38:44

using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Diagnostics;   
using System.Linq;   
using System.ServiceProcess;   
using System.Text;   
using System.Data.SqlClient;   
using System.Xml;   
using System.IO;   
using System.Collections;   
  
namespace StockUpService   
{   
    public partial class StockUpService : ServiceBase   
    {   
        public StockUpService()   
        {   
            InitializeComponent();   
  
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))   
            {   
                System.Diagnostics.EventLog.CreateEventSource(   
                    "MySource", "MyNewLog");   
            }   
            eventLog1.Source = "MySource";   
            eventLog1.Log = "MyNewLog";   
        }   
  
        protected override void OnStart(string[] args)   
        {   
            System.Timers.Timer t = new System.Timers.Timer(50000);             //实例化Timer类,设置间隔时间为50000毫秒|50秒执行一次;    
            t.Elapsed += new System.Timers.ElapsedEventHandler(runservice);         //到达时间的时候执行事件;    
            t.AutoReset = true;                                                 //设置是执行一次(false)还是一直执行(true);    
            t.Enabled = true;                                                   //是否执行System.Timers.Timer.Elapsed事件;   
        }   
        public void runservice(object source, System.Timers.ElapsedEventArgs e)   
        {   
            string t;   
            t = System.DateTime.Now.Hour.ToString()+System.DateTime.Now.Minute.ToString();   
            if (t == "177")   
            {   
                readXml();   
            }   
        }   
  
        public static void readXml()   
        {   
            string classId;   
            string filialeId;   
            string startTime;   
            string endTime;   
            string companyType;   
            int timeInterval;   
            string aa = "";   
            string xmlChildNodes = "";   
            string dsn = "server=(local);database=keede1228;user id=sa;password=123;";   
            SqlConnection connection = new SqlConnection(dsn);   
  
            XmlDocument xmlDoc = new XmlDocument();   
            xmlDoc.Load("d:\\StockUpConfig.xml");   
            XmlNode xn = xmlDoc.SelectSingleNode("stockwarning");   
            XmlNodeList xnl = xn.ChildNodes;   
  
            XmlNode xn3 = xmlDoc.SelectSingleNode("stockwarning/goodsclass");   
            XmlNodeList xn3l = xn3.ChildNodes;   
  
  
            foreach (XmlNode xnf in xnl)   
            {   
                XmlElement xe = (XmlElement)xnf;   
                XmlNodeList xnf1 = xe.ChildNodes;   
                xmlChildNodes = xmlChildNodes + xnf.InnerText + "|";   
            }   
  
            string[] cc = xmlChildNodes.Split('|');   
            string outputpath;   
            filialeId = cc[1];   
            companyType = cc[2];   
            timeInterval = Convert.ToInt16(cc[3]);   
            outputpath = cc[4];   
            endTime = DateTime.Now.Date.ToShortDateString();   
            startTime = DateTime.Now.AddDays(-timeInterval).ToShortDateString();   
            string className;   
            int po = 1;   
            //int stockUpNameId = 0;   
            foreach (XmlNode xn3f in xn3l)   
            {   
                XmlNode xn2 = xmlDoc.SelectSingleNode("stockwarning/goodsclass/group" + po);   
                XmlNodeList xn2l = xn2.ChildNodes;   
                XmlElement xe = (XmlElement)xn3f;   
                className = xe.GetAttribute("classname");   
                po++;   
                //stockUpNameId++;   
                DataSet ds = new DataSet();   
                foreach (XmlNode xn2f in xn2l)   
                {   
                    aa = xn2f.InnerText;   
  
                    connection.Open();   
                    classId = aa;   
                    SqlCommand command = connection.CreateCommand();   
                    command.CommandText = "P_Raifei_GetClassGoodsStockUp";   
                    command.CommandType = CommandType.StoredProcedure;   
                    SqlParameter param1 = new SqlParameter("@ClassId", classId);   
                    SqlParameter param2 = new SqlParameter("@FilialeId", filialeId);   
                    SqlParameter param3 = new SqlParameter("@StartTime", startTime);   
                    SqlParameter param4 = new SqlParameter("@EndTime", endTime);   
                    SqlParameter param5 = new SqlParameter("@CompanyType", companyType);   
                    command.Parameters.Add(param1);   
                    command.Parameters.Add(param2);   
                    command.Parameters.Add(param3);   
                    command.Parameters.Add(param4);   
                    command.Parameters.Add(param5);   
  
                    SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);   
                    reader.Close();   
  
                    string select = "P_Raifei_GetClassGoodsStockUp" + " " + "'" + classId + "'," + "'" + filialeId + "'," + "'" + startTime + "',"  
                        + "'" + endTime + "'," + "'" + companyType + "'";   
                    SqlDataAdapter da = new SqlDataAdapter(select, connection);   
                    int abc = 1;   
                    string tbname;   
                    string stockUpName;   
                    stockUpName = outputpath + "StockUp" + DateTime.Now.Date.ToShortDateString() + "-" + className + ".xml";   
                    tbname = "sp" + abc;   
                    abc++;   
                    da.Fill(ds, tbname);   
                    ds.WriteXml(stockUpName, XmlWriteMode.WriteSchema);   
  
                }   
            }   
            connection.Close();   
        }   
  
        protected override void OnStop()   
        {   
            eventLog1.WriteEntry("In onStop.");   
        }   
  
        protected override void OnContinue()   
        {   
            eventLog1.WriteEntry("In OnContinue.");   
        }     
  
    }   
}  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuxiuming/archive/2010/01/27/5262542.aspx

还有一个XML的配置文件没有发出来,就是从XML中读取要查询的变量,然后读取数据库,把结果输出到XML。
有时候可以把所有的结果都输出来,有的时候只能输出第一次查询出来的结果,后面的都输不出来了,谢谢!

8 个解决方案

#1


请大家帮我检查这个windows服务程序,很不稳定。

#2


你在timer中搞,这样有可能,因为是定时执行,有可能第一还没执行完, timer就重新开始了。
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.

#3


我们最近也在搞这个东东 传说搞出来了  用的LINQ   但是我还是云里雾里的

#4


2楼能说的更详细些吗?

#5


System.Timers.Timer t = new System.Timers.Timer(500000);    
时间间隔弄长点

#6


可以尝试在执行的时候将Timer disable一下,执行完成了再Enable.

#7


加点日志信息很快就能知道问题吧。。。

这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。

#8


timer时间加长也许可以

#1


请大家帮我检查这个windows服务程序,很不稳定。

#2


你在timer中搞,这样有可能,因为是定时执行,有可能第一还没执行完, timer就重新开始了。
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.

#3


我们最近也在搞这个东东 传说搞出来了  用的LINQ   但是我还是云里雾里的

#4


2楼能说的更详细些吗?

#5


System.Timers.Timer t = new System.Timers.Timer(500000);    
时间间隔弄长点

#6


可以尝试在执行的时候将Timer disable一下,执行完成了再Enable.

#7


加点日志信息很快就能知道问题吧。。。

这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。

#8


timer时间加长也许可以