using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using ConsoleDataSync; using System.Data.SqlClient; using System.Configuration; using Newtonsoft.Json; namespace WindowsService { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { EventLog.WriteEntry(""); WriteLog("用户表同步服务启动"); System.Timers.Timer t = new System.Timers.Timer(); t.Interval = 1000; t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrc);//到达时间执行该时间 t.AutoReset = true;//true为一直执行服务 t.Enabled = true;//是否设置执行System.Timers.Timer.Enabled事件 } private void ChkSrc(object sender, System.Timers.ElapsedEventArgs e) { int Hour = e.SignalTime.Hour; int Min = e.SignalTime.Minute; int Second = e.SignalTime.Second; if (Hour == 24 && Min == 00 && Second == 00) { try { System.Timers.Timer tt = (System.Timers.Timer)sender; tt.Enabled = false; SendMessge(); tt.Enabled = true; } catch (Exception err) { WriteLog(err.Message); } } } /// /// 开启服务 /// private void SendMessge() { WriteLog("同步服务开启"); string str = TableServer(); WriteLog(str); } /// /// 记录日志 /// /// 时间+ private void WriteLog(string str) { StreamWriter dout = new StreamWriter(@"c:/" + "server_userLog.txt", true); dout.WriteLine("操作事件:" + str); dout.WriteLine("操作时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); dout.WriteLine("----------------------------------------"); dout.Close(); } /// /// 服务停止 /// protected override void OnStop() { WriteLog("服务停止"); EventLog.WriteEntry("服务停止"); } public string TableServer() { string sendTableName = "SMSHasSend_" + DateTime.Now.ToString("yyyyMM"); string recvTableName = "SMSHasReceived_" + DateTime.Now.ToString("yyyyMM"); DataProvider.E(cmd => { cmd.CommandText = "IF OBJECT_ID(N'" + sendTableName + "',N'U') IS NULL SELECT * INTO " + sendTableName + " FROM SMSHasSend " + "ELSE DELETE FROM " + sendTableName; cmd.ExecuteNonQuery(); }); DataProvider.E(cmd => { cmd.CommandText = "IF OBJECT_ID(N'" + recvTableName + "',N'U') IS NULL SELECT * INTO " + recvTableName + " FROM SMSHasReceived " + "ELSE DELETE FROM " + recvTableName; cmd.ExecuteNonQuery(); }); DataProvider.E(cmd => { cmd.CommandText = "DELETE FROM USERS"; cmd.ExecuteNonQuery(); }); WriteLog("创建表完成"); string[] sources = JsonConvert.DeserializeObject(ConfigurationManager.AppSettings["user-sources"]); foreach (string s in sources) { using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString)) { try { connection.Open(); DataSet ds = new DataSet(); SqlDataAdapter command = new SqlDataAdapter("SELECT * FROM USERS", connection); command.Fill(ds, "Users"); DataProvider.Insert("Users", ds.Tables[0], ds.Tables[0].Rows.Count); } catch (SqlException ex) { return ex.Message; } } } sources = JsonConvert.DeserializeObject(ConfigurationManager.AppSettings["sms-sources"]); foreach (string s in sources) { using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString)) { try { connection.Open(); SqlDataAdapter command; DataSet sendMsgs = new DataSet(); command = new SqlDataAdapter("IF OBJECT_ID(N'" + sendTableName + "', N'U') IS NOT NULL SELECT * FROM " + sendTableName, connection); command.Fill(sendMsgs, sendTableName); if (sendMsgs.Tables.Count > 0) DataProvider.Insert(sendTableName, sendMsgs.Tables[0], sendMsgs.Tables[0].Rows.Count); DataSet recvMsgs = new DataSet(); command = new SqlDataAdapter("IF OBJECT_ID(N'" + recvTableName + "', N'U') IS NOT NULL SELECT * FROM " + recvTableName, connection); command.Fill(recvMsgs, recvTableName); if (recvMsgs.Tables.Count > 0) DataProvider.Insert(recvTableName, recvMsgs.Tables[0], recvMsgs.Tables[0].Rows.Count); } catch (SqlException ex) { return ex.Message; } } } return "数据同步成功"; } } }