我正在编写一个Windows服务,它将在用户定义的时间将报告导出到Excel。用户可以选择使用以下选项运行报告:
注意(我的SQL Server数据每秒更新一次&我编写了一个Windows应用程序,用户将从中配置上面的,将保存到xml中)
我的Windows服务配置为在TimerInterval 30000运行。
我的问题是: 1.如果用户将开始时间设置为10:00 PM,将结束时间设置为12:00 AM,将每日时间设置为12:00 AM,则下面的代码将失败,因为我正在使用system.datetime.now
DateTime tempDailyTime=DateTime.ParseExact(DailyTime,"HH:mm:ss tt",CultureInfo.InvariantCulture);
string curTime = System.DateTime.Now.ToString("HH:mm:ss tt");
DateTime tempCurrentTime = DateTime.ParseExact(curTime, "HH:mm:ss tt", CultureInfo.InvariantCulture);
if (tempCurrentTime >= tempDailyTime)
{
string tempFilename=Convert.ToString(tempDailyTime.TimeOfDay).Replace(":","-")+".xlsx";
if (!File.Exists(tempDir + "\\DailyTime" + "\\" + ReportName + "_" + tempFilename))
{
GenerateReportWithStartTimeandEndTime(ReportName,ReportID,ConnectionString,ReportColumnName,ReportBQuery,StartTime,EndTime,DailyTime,tempDir+"\\DailyTime",tempFilename);
}
}
用于生成每日,每周,每月,每年我已指定运行报告的预定时间
DateTime scheduleTime = new DateTime(currentTime.Year,currentTime.Month,currentTime.Day,23,59,59,999);
在到达下面的代码部分之前经过计时器,如果datetime改变,它将生成一个空白报告。 我的每日报告生成代码如下:
if (Daily == "true")
{
DateTime currentTime = DateTime.Now;
int intervalToElapse = 0;
DateTime scheduleTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 23, 59, 59, 999);
if (currentTime <= scheduleTime)
intervalToElapse = (int)scheduleTime.Subtract(currentTime).TotalSeconds;
else
intervalToElapse = (int)scheduleTime.AddDays(1).Subtract(currentTime).TotalSeconds;
_DailyTimer = new System.Timers.Timer(intervalToElapse);
if (_DailyTimer.Interval == 0)
{
//GenerateDailyReport(ReportName, ReportID, ConnectionString, ReportColumnName, ReportBQuery, StartTime, EndTime, DailyTime, tempDir + "\\DailyTime", tempFilename);
}
}
if (Weekly == "true")
{
//GenerateWeeklyReport(ReportName, ReportID, ConnectionString, ReportColumnName, ReportBQuery, StartTime, EndTime, DailyTime, tempDir + "\\DailyTime", tempFilename);
}
if (Monthly == "true")
{
//GenerateMonthlyReport(ReportName, ReportID, ConnectionString, ReportColumnName, ReportBQuery, StartTime, EndTime, DailyTime, tempDir + "\\DailyTime", tempFilename);
}
if (Yearly == "true")
{
//GenerateYearlyReport(ReportName, ReportID, ConnectionString, ReportColumnName, ReportBQuery, StartTime, EndTime, DailyTime, tempDir + "\\DailyTime", tempFilename);
}
要生成报告的数据来自以下xml文件:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAutoReportXML>
<AutoReportXML ReportName="oks" ReportID="64" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t1.id, t1.pt100, t1.pt200, t1.pt300, t1.inverter1, t1.voltage1, t1.power1, t1.inverter2, t1.voltage2, t1.power2, t1.cdt FROM ab_Test t1 WHERE t1.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="18:00:00 PM" EndTime="22:00:00 PM" DailyTime="22:01:00 PM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="ShiftC" ReportID="63" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t1.id, t1.pt100, t1.pt200, t1.pt300, t1.inverter1, t1.voltage1, t1.power1, t1.inverter2, t1.voltage2, t1.power2, t1.cdt FROM ab_Test t1 WHERE t1.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="22:00:00 PM" EndTime="06:00:00 AM" DailyTime="18:01:00 PM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="ShiftB" ReportID="62" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t1.id, t1.pt100, t1.pt200, t1.pt300, t1.inverter1, t1.voltage1, t1.power1, t1.inverter2, t1.voltage2, t1.power2, t1.cdt FROM ab_Test t1 WHERE t1.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="14:00:00 PM" EndTime="22:00:00 PM" DailyTime="22:01:00 PM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="shiftA" ReportID="61" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t1.id, t1.pt100, t1.pt200, t1.pt300, t1.inverter1, t1.voltage1, t1.power1, t1.inverter2, t1.voltage2, t1.power2, t1.cdt FROM ab_Test t1 WHERE t1.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="06:00:00 AM" EndTime="14:00:00 PM" DailyTime="14:01:00 PM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="testreport1" ReportID="59" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t0.testid, t0.pt500, t0.pt600, t0.cdt FROM sampletest t0 WHERE t0.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="17:00:00 PM" EndTime="11:59:59 PM" DailyTime="00:01:00 AM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="testreport" ReportID="58" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t0.testid, t0.pt500, t0.pt600, t0.cdt FROM sampletest t0 WHERE t0.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="09:00:00 AM" EndTime="17:00:00 PM" DailyTime="17:01:00 PM" Daily="true" Weekly="true" Monthly="true" Yearly="true" Loc="C:\Users\khasim\Desktop\testAutoGenerated" />
<AutoReportXML ReportName="somereport" ReportID="57" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t0.testid, t0.pt500, t0.pt600, t0.cdt FROM sampletest t0 WHERE t0.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="02:00:00 AM" EndTime="05:37:47 AM" DailyTime="06:37:47 AM" Daily="True" Weekly="True" Monthly="True" Yearly="True" Loc="C:\Users\khasim\Desktop\testAutoGenerated">57</AutoReportXML>
</ArrayOfAutoReportXML>
我需要建议如何处理这个或我做错了什么。