<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      yunxizfj

      等待...

      導(dǎo)航

      [小技術(shù)應(yīng)用]使用windows服務(wù)備份數(shù)據(jù)

      1.使用VS2005創(chuàng)建windows服務(wù),從工具箱的組件表當(dāng)中拖動一個Timer對象到這個設(shè)計表面上 (注意: 要確保是從組件列表而不是從Windows窗體列表當(dāng)中使用Timer)  ,修改“.Designer.cs”文件,將timer組件修改為繼承自System.Timers.Timer

      2.在設(shè)計器右鍵選擇添加安裝程序,設(shè)置serviceInstaller1組件的屬性:  
            1) ServiceName = My Sample Service
            2) StartType = Automatic (開機(jī)自動運行)
      3. 設(shè)置serviceProcessInstaller1組件的屬性    Account = LocalSystem

      4.添加資源文件Config.xml,如下:

       

      <?xml version="1.0" encoding="utf-8" ?>
      <Table>
        
      <Row>
          
      <Server>.</Server>
          
      <User>sa</User>
          
      <Pwd>123456</Pwd>
          
      <DataBase>Northwind</DataBase>
          
      <Time></Time>
          
      <Frequency>1</Frequency>
        
      </Row>
      </Table>

      5.在雙擊這個Timer,然后在里面寫一些數(shù)據(jù)庫操作的代碼,下面是Service1.cs全部代碼:

       

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Diagnostics;
      using System.ServiceProcess;
      using System.Text;
      using System.Configuration.Install;
      using Microsoft.Win32;
      using System.Data.SqlClient;
      using System.IO;

      namespace DataBaseBakupServer
      {
          
      public partial class Service1 : ServiceBase
          {
              
      #region 變量
              
      private string Path;
              
      //上次備份日期
              private string _time;
              
      //間隔天數(shù)
              private int _Frequency;

              
      private string _constr;
              
      private string _server;
              
      private string _user;
              
      private string _pwd;
              
      private string _database;
              
      #endregion

              
      public Service1()
              {
                  InitializeComponent();
                  GetServicePath();
                  InitData();
              }

              
      #region 初始化服務(wù)信息
              
      private void InitData()
              {
                  DataSet ds 
      = new DataSet();
                  ds.ReadXml(Path 
      + "Config.xml");
                  DataRow dr 
      = ds.Tables[0].Rows[0];

                  _time 
      = dr["Time"].ToString();
                  _Frequency 
      = Convert.ToInt32(dr["Frequency"].ToString());
                  _server 
      = dr["Server"].ToString();
                  _user 
      = dr["User"].ToString();
                  _pwd 
      = dr["Pwd"].ToString();
                  _database 
      = dr["DataBase"].ToString();

                  _constr 
      = string.Format("server={0};database={1};User Id={2};pwd={3}", _server, "master", _user, _pwd);
              }
              
      private void GetServicePath()
              {
                  
      try
                  {
                      RegistryKey rk 
      = Registry.LocalMachine;
                      RegistryKey rkSub 
      = rk.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\DataBaseBakupServer");
                      
      string servicePath = rkSub.GetValue("ImagePath").ToString();
                      
      string exePath = servicePath.Substring(servicePath.LastIndexOf("\\"+ 1);
                      
      string tmp = servicePath.Substring(1, servicePath.Length - exePath.Length-1);
                      Path 
      = tmp;
                  }
                  
      catch { }
              }
              
      #endregion

              
      //必須注意:我明明是從“組件”下添加的“Timer”應(yīng)該來自“System.Timers命名空間”(“System.Timers.Timer”才能在Windows服務(wù)程序中正常定時調(diào)用),但是現(xiàn)在Timer卻繼承至“System.Windows.Forms.Timer”。所以得修改“.Designer.cs”文件
              #region 啟動和關(guān)閉
              
      protected override void OnStart(string[] args)
              {
                  
      // TODO: 在此處添加代碼以啟動服務(wù)。
                  timer1.Enabled = true;
                  timer1.Start();
                  WriteLog(
      string.Format("{0}  數(shù)據(jù)庫備份服務(wù)啟動", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
              }

              
      protected override void OnStop()
              {
                  
      // TODO: 在此處添加代碼以執(zhí)行停止服務(wù)所需的關(guān)閉操作。
                  timer1.Stop();
                  timer1.Enabled 
      = false;
                  WriteLog(
      string.Format("{0}  數(shù)據(jù)庫備份服務(wù)關(guān)閉", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
              }
             
              
      #endregion


              
      #region 備份操作
              
      private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
              {
                  
      //定時操作

                  
      if (_time == "" || _time == null)
                  {
                      
      //沒有保存上次本分時間,可能是第一次執(zhí)行備份
                      
      //WriteLog(string.Format("{0}  開始備份操作", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                      Bakup();
                      InitData();
                      
      //WriteLog(string.Format("{0}  備份操作完成", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                      return;
                  }
                  
      string now = DateTime.Now.ToString("yyyy-MM-dd");
                  
      if (this.DateDiff(Convert.ToDateTime(now), Convert.ToDateTime(_time)) >= _Frequency)
                  {
                      
      //WriteLog(string.Format("{0}  開始備份操作", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                      Bakup();
                      InitData();
                      
      //WriteLog(string.Format("{0}  備份操作完成", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                      return;
                  }
              }
              
      #endregion

              
      #region 方法
              
      private bool Bakup()
              {
                  
      string file = DateTime.Now.ToString("yyyyMMddHHmm");
                  
      string sql = string.Format("BACKUP DATABASE {1} TO DISK = '{0}.bak'", Path + "Bak\\" + file, _database);
                  SqlConnection con 
      = new SqlConnection(_constr);
                  SqlCommand cmd 
      = new SqlCommand(sql, con);
                  
      try
                  {
                      con.Open();
                      cmd.ExecuteNonQuery();
                      WriteBakDate();
                      
      return true;
                  }
                  
      catch(Exception e)
                  {
                      WriteLog(
      string.Format("{1}  備份數(shù)據(jù)庫失敗!原因可能是{0}", e.Message, DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                      
      return false;
                  }
                  
      finally
                  {
                      con.Close();
                  }
              }
              
      /// <summary>
              
      /// 計算2個時間的差值(單位:天)
              
      /// </summary>
              
      /// <param name="DateTime1"></param>
              
      /// <param name="DateTime2"></param>
              
      /// <returns></returns>
              private int DateDiff(DateTime DateTime1, DateTime DateTime2)
              {
                  
      int dateDiff = 0;
                  
      try
                  {
                      TimeSpan ts1 
      = new TimeSpan(DateTime1.Ticks);
                      TimeSpan ts2 
      = new TimeSpan(DateTime2.Ticks);
                      TimeSpan ts 
      = ts1.Subtract(ts2).Duration();
                      dateDiff 
      = ts.Days;
                  }
                  
      catch
                  {

                  }
                  
      return dateDiff;
              }
              
      private void WriteBakDate()
              {
                  
      try
                  {
                      DataSet ds 
      = new DataSet();
                      ds.ReadXml(Path 
      + "\\Config.xml");
                      DataRow dr 
      = ds.Tables[0].Rows[0];
                      dr.BeginEdit();
                      dr[
      "Time"= DateTime.Now.ToString("yyyy-MM-dd");
                      dr.EndEdit();
                      ds.WriteXml(Path 
      + "Config.xml");
                      WriteLog(
      string.Format("{0}  備份數(shù)據(jù)庫成功!", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                  }
                  
      catch (Exception e)
                  {
                      WriteLog(
      string.Format("{1}  備份數(shù)據(jù)庫成功!但寫入配置文件最后備份時間項失敗,原因可能是{0}", e.Message, DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
                  }
              }
              
      #endregion

              
      #region 日志
              
      private void WriteLog(string s)
              {
                  FileStream fs 
      = new FileStream(Path + "log.txt", FileMode.OpenOrCreate);
                  StreamReader sr 
      = new StreamReader(fs);
                  StreamWriter sw 
      = new StreamWriter(fs);
                  
      try
                  {
                      
      string tmp = sr.ReadToEnd();
                      tmp 
      += "\r\n" + s;
                      sw.Write(tmp);
                  }
                  
      catch
                  { }
                  
      finally
                  {
                      sw.Close();
                      sr.Close();
                      fs.Close();
                  }
              }
              
      #endregion

              

          }
      }

       

      6.然后再生成項目,不能使用F5,只能使用命令,這是BAT的命令:

       

      C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe D:\C#\DataBaseBakupServer\DataBaseBakupServer\bin\Debug\DataBaseBakupServer.exe
      net start DataBaseBakupServer
      pause

      注意:需要修改自己的目錄路徑

      7.不多說了,希望小弟能在這里起到拋磚引玉的作用,網(wǎng)上關(guān)于這些的文章實在是很少啊,希望能和高手多多交流下

      8.源代碼下載地址(右鍵另存為)

      posted on 2009-01-20 00:20  yunxizfj  閱讀(662)  評論(3)    收藏  舉報

      主站蜘蛛池模板: 亚洲经典在线中文字幕| 欧美白妞大战非洲大炮| 扎囊县| 久久一日本道色综合久久| 国产老女人精品免费视频| 国产成人精品一区二区秒拍1o| 亚洲国产精品综合色在线| 狠狠色综合久久丁香婷婷| av无码一区二区大桥久未| 无码国模国产在线观看免费| 99国产精品欧美一区二区三区 | 人妻系列无码专区免费| 国产精品亚洲一区二区z| 国产蜜臀在线一区二区三区| 国产精品一区二区在线蜜芽tv| 国产中文三级全黄| 色婷婷综合久久久久中文一区二区| 最新精品国偷自产在线美女足| 无码av不卡免费播放| 7878成人国产在线观看| 一区二区三区在线色视频| 久久精品夜夜夜夜夜久久| 国产福利微视频一区二区| 成人做受120秒试看试看视频| 51妺嘿嘿午夜福利| 色吊丝一区二区中文字幕| 18禁美女裸体爆乳无遮挡| 国产在线啪| 美日韩精品一区二区三区| 本道久久综合无码中文字幕| 国精品无码一区二区三区左线 | av中文字幕国产精品| 欧美性猛交xxxx免费看| 日韩有码中文在线观看| 亚洲精品久久久久久久久久吃药| 泰宁县| 亚洲国产成人久久一区久久 | 免费人成在线观看品爱网| 精品熟女少妇免费久久| 不卡一区二区三区四区视频| 国产香蕉尹人综合在线观看|