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
#2
你在timer中搞,这样有可能,因为是定时执行,有可能第一还没执行完, timer就重新开始了。
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.
#3
我们最近也在搞这个东东 传说搞出来了 用的LINQ 但是我还是云里雾里的
#4
2楼能说的更详细些吗?
#5
System.Timers.Timer t = new System.Timers.Timer(500000);
时间间隔弄长点
时间间隔弄长点
#6
可以尝试在执行的时候将Timer disable一下,执行完成了再Enable.
#7
加点日志信息很快就能知道问题吧。。。
这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。
这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。
#8
timer时间加长也许可以
#1
#2
你在timer中搞,这样有可能,因为是定时执行,有可能第一还没执行完, timer就重新开始了。
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.
定义一个boolean 的,当前面的真个执行完了后,在执行下一次timer.
#3
我们最近也在搞这个东东 传说搞出来了 用的LINQ 但是我还是云里雾里的
#4
2楼能说的更详细些吗?
#5
System.Timers.Timer t = new System.Timers.Timer(500000);
时间间隔弄长点
时间间隔弄长点
#6
可以尝试在执行的时候将Timer disable一下,执行完成了再Enable.
#7
加点日志信息很快就能知道问题吧。。。
这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。
这代码里面没有一个地方检查取得的对象是否是null,就拿来直接使用。。。
#8
timer时间加长也许可以