用C#写一个windows服务可定时执行sql Service数据库里面的存储过程(带两个参数),急求代码!高手赐教!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C#写一个windows服务可定时执行sql Service数据库里面的存储过程(带两个参数),急求代码!高手赐教!相关的知识,希望对你有一定的参考价值。
void ToStart()System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 10000;
timer.Enabled = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
//这里写执行存储过程的代码
参考技术A 在工具栏里拉一个想小闹钟的空间。然后设定他的Interval 属性。Interval 是表示间隔时间,86400000代表一天。你自己去算吧。设定好后你双击它,就会有一个事件。你在事件中写你要调用的存储过程就可以了。 参考技术B 这个要用作业吧,看看这个吧:http://tech.watchstor.com/storage-systems-114420.htm
C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载。
今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以让一个exe即能直接运行也行安装为windows服务
首先我们创建一个Windows应用程序,(我创建的是控制台程序,WinForm也一样)
接下来在项目中添加一个Windows服务类
然后双击“MainService.cs”,在上面点右键“打开代码”
这里面写服务的具体实现,以下是我写的示例代码
partial class MainService : ServiceBase { public MainService() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 System.IO.File.AppendAllText("D:\\\\log.txt", "服务已启动……" + DateTime.Now.ToString()); } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 System.IO.File.AppendAllText("D:\\\\log.txt", "服务已停止……" + DateTime.Now.ToString()); } }
然后我们改程序入口Main方法,让其在启动时识别是Windows应用程序还是Windows服务,如果是应用程序就执行应用程序的代码,如果是服务就执行MainService的代码
如果是服务,我给了一个"s"参数,如果有这个参数就证明是Windows服务,然后启动MainService
static void Main(string[] args) { //如果传递了"s"参数就启动服务 if (args.Length > 0 && args[0] == "s") { //启动服务的代码,可以从其它地方拷贝 ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new MainService(), }; ServiceBase.Run(ServicesToRun); } else {}
然后,我们再实现应用程序的功能,就是上面的else语句块,应用程序的功能就是安装/卸载服务,可以用windows自带的sc命令来进行安装和卸载,具体代码如下:
Console.WriteLine("这是Windows应用程序"); Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出"); var rs = int.Parse(Console.ReadLine()); switch (rs) { case 1: //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序 var path = Process.GetCurrentProcess().MainModule.FileName + " s"; Process.Start("sc", "create myserver binpath= \\"" + path + "\\" displayName= 我的服务 start= auto"); Console.WriteLine("安装成功"); Console.Read(); break; case 2: Process.Start("sc", "delete myserver"); Console.WriteLine("卸载成功"); Console.Read(); break; case 3: break; }
这样我们就实现了一个即是可执行程序又是Windows服务的应用程序
Main方法完整代码如下
static void Main(string[] args) { if (args.Length > 0 && args[0] == "s") { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new MainService(), }; ServiceBase.Run(ServicesToRun); } else { Console.WriteLine("这是Windows应用程序"); Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出"); var rs = int.Parse(Console.ReadLine()); switch (rs) { case 1: //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序 var path = Process.GetCurrentProcess().MainModule.FileName + " s"; Process.Start("sc", "create myserver binpath= \\"" + path + "\\" displayName= 我的服务 start= auto"); Console.WriteLine("安装成功"); Console.Read(); break; case 2: Process.Start("sc", "delete myserver"); Console.WriteLine("卸载成功"); Console.Read(); break; case 3: break; } } }
至此,程序已基本写完,接下来我们测试一下
直接双击ServiceOrApp.exe
输入 1
提示安装成功,然后运行“services.msc"打开服务管理器
可以发现我们的服务已安装成功,然后右键启动服务
成功启动
然后去D盘看看log.txt
说明服务执行正常
我们再停止服务
成功停止后再看看D盘的log.txt文件
看到以上内容,说明服务启动和停止都没问题(忘了输出换行符 - -!)
然后我们再试一下卸载服务,还是双击ServiceOrApp.exe,选择2
提示卸载成功,然后再运行“services.msc"打开服务管理器
可以看到已经没有”我的服务“了,已成功卸载
这里安装和卸载主要运用了windows的sc命令,然后使用启动参数来判断是服务还是程序以执行不同的代码
以上是关于用C#写一个windows服务可定时执行sql Service数据库里面的存储过程(带两个参数),急求代码!高手赐教!的主要内容,如果未能解决你的问题,请参考以下文章