基本想法是采用定时器定时触发某个任务,生成excel文件,并利用email发送出去。开发时间只有2天不到,故以实现功能为第一目标。
一、定时器示例代码(Global.asax文件中)
void
Application_Start(
object
sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
// 在应用程序启动时运行的代码
System.Timers.Timer timer = new System.Timers.Timer(60000); // 1 * 60 * 1000毫秒的时间间隔
timer.AutoReset = true; //设置是执行一次(false)还是一直执行(true);
timer.Enabled = true; //到达时间的时候执行事件;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
timer_Elapsed(
object
sender, System.Timers.ElapsedEventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
// 每周一早晨8:30左右,用email给固定收益部报发送周报表
System.DateTime currentTime = DateTime.Now;
if (currentTime.DayOfWeek == DayOfWeek.Monday &&
currentTime.Hour == 8 &&
currentTime.Minute >= 30 && currentTime.Minute <= 40)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
// 生成excel文件,并用email发送
}
}
二、使用ReportViewer,编写代码导出到excel文件
Warning[] Warnings;
string
strMimeType;
string
strEncoding;
string
strFileNameExtension;
string
[] strStreamIds;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
FundStat fundStat
=
new
FundStat();
//
基金统计
ReportViewer ReportViewer1
=
new
ReportViewer();
ReportDataSource datasource
=
null
;
DataSet ds
=
null
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
ReportViewer1.LocalReport.ReportPath
=
"
c:Stat und_stat.rdlc
"
;
ReportViewer1.LocalReport.DataSources.Clear();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
ds
=
fundStat.GetHolderStruct(inFundCode, inEndDate);
datasource
=
new
ReportDataSource(
"
DSFundStat_HolderStruct
"
, ds.Tables[
0
]);
ReportViewer1.LocalReport.DataSources.Add(datasource);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
ReportViewer1.LocalReport.Refresh();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
写出到excel文件
byte
[] bytes
=
ReportViewer1.LocalReport.Render(
"
Excel
"
,
null
,
out
strMimeType,
out
strEncoding,
out
strFileNameExtension,
out
strStreamIds,
out
Warnings);
using
(System.IO.FileStream fs
=
new
System.IO.FileStream(arrFilePath[i], System.IO.FileMode.Create))
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
fs.Write(bytes, 0, bytes.Length);
}
三、Email发送示例代码(将磁盘上的excel文件作为附件发送到邮件列表)
private
void
SendMail()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
MailMessage Mess = new MailMessage(); //提供用于构造电子邮件的属性和方法
Mess.From = new MailAddress("JSDC@JSFUND.CN"); //设置发件人的email地址
Mess.To.Add("luocm@jsfund.cn"); //设置收件人的email地址
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Mess.Subject = "统计数据-20080414"; //设置电子邮件的主题行
//Mess.IsBodyHtml = true; //设置电子邮件正文的内容类型
Mess.Body = "固定收益部"; //设置电子邮件正文的内容
Mess.Priority = MailPriority.High; //设置电邮的优先级。High为高,Low为低 优先级,Normal邮件具有普通优先级
Attachment att = new Attachment("d:/fundstat_20080414.xls");
Mess.Attachments.Add(att); // 添加附件文件
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
SmtpClient smtp = new SmtpClient("mail.jsfund.cn");
smtp.Send(Mess); //发送邮件
}
总结:一、定时器模块程序结构上可再梳理一下;二、任务调度模块可引入xml机制,将任务定制标准化,增强灵活配置能力和程序的扩展性(当然开发规模会大大增加)