2016-12-30 1 views
0

Я разработал сервис Windows, который будет регистрировать все биометрические журналы. Для этого я использовал npgsql для подключения postgres. Нижеприведенный код будет выполнять всю работу и активировать ведение журнала, я использовал таймер в службе Windows, который будет запускать следующую функцию каждые 1 час. Нижеприведенный код отлично подходит для сбора журнала посещаемости из биометрического. Но, мне нужно, после сбора журнала и записи его в таблицу базы данных, он должен очистить журналы в биометрическом устройстве. Перед тем, как это сделать, рассмотрите приведенный ниже сценарий.C# Очистить биометрические журналы после входа в базу данных postgresql без потери данных

1.at 1:00 Служба Windows начинает собирать данные. 2.at 1:10 обслуживание завершает сбор данных. 3.at 1:10, службе необходимо очистить журнал. 4. При очистке журнала, если какой-либо человек получает доступ к устройству, этот журнал не следует опускать. OpenConn() & CloseConn() используется для открытия и закрытия соединения с базой данных. Сброс() используется для очистки памяти.

public void getLog() 
    { 
     bIsConnected = axCZKEM1.Connect_Net("xxx.xxx.xxx.xxx", Convert.ToInt32("4370")); 
     if (bIsConnected == true) 
     { 
      LogEntry(string.Format("{0} : Biometric Device Connected", DateTime.Now)); 
      string sdwEnrollNumber = ""; 
      int idwVerifyMode = 0; 
      int idwInOutMode = 0; 
      int idwYear = 0; 
      int idwMonth = 0; 
      int idwDay = 0; 
      int idwHour = 0; 
      int idwMinute = 0; 
      int idwSecond = 0; 
      int idwWorkcode = 0; 
      int idwErrorCode = 0; 
      int iGLCount = 0; 
      // int iIndex = 0;    

      if (this.axCZKEM1.ReadGeneralLogData(iMachineNumber))//read all the attendance records to the memory 
      { 
       while (this.axCZKEM1.SSR_GetGeneralLogData(iMachineNumber, out sdwEnrollNumber, out idwVerifyMode, 
          out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute, out idwSecond, ref idwWorkcode))//get records from the memory 
       { 
        var first = iGLCount.ToString(); 
        var second = sdwEnrollNumber;//modify by Darcy on Nov.26 2009     
        var third = idwVerifyMode.ToString(); 
        var fourth = idwInOutMode.ToString(); 
        var fifth = idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + " " + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString(); 
        var sixth = idwWorkcode.ToString(); 
        string check1 = "False"; 
        try 
        { 
         this.OpenConn(); 
         //LogEntry(string.Format("{0} : Opens connection", DateTime.Now)); 
         string SQL = "select exists(select bio_enrollno from bio_branch where bio_datetime = '" + fifth + "')"; 
         using (NpgsqlCommand cmd1 = new NpgsqlCommand(SQL, conn)) 
         { 
          NpgsqlDataReader dr = cmd1.ExecuteReader(); 
          while (dr.Read()) 
          { 
           for (int i = 0; i < dr.FieldCount; i++) 
           { 
            string output = dr[i].ToString(); 
            if (output.Equals(check1)) 
            { 
             this.CloseConn(); 
             //LogEntry(string.Format("{0} : string equal and opens connection", DateTime.Now)); 
             this.OpenConn(); 
             string SQL1 = "INSERT INTO bio_branch(bio_enrollno, bio_verifymode, bio_inoutmode, bio_datetime, bio_workcode) VALUES ('" + second + "','" + third + "','" + fourth + "' ,'" + fifth + "', '" + sixth + "')"; 
             NpgsqlCommand command1 = new NpgsqlCommand(SQL1, conn); 
             Int32 rowsaffected1 = command1.ExecuteNonQuery(); 
             //LogEntry(string.Format("{0} : DB Write Successfull", DateTime.Now)); 
             this.CloseConn(); 
            } 
           } 
          } 
          //LogEntry(string.Format("{0} : Close Connection", DateTime.Now)); 
          this.CloseConn(); 
         } 
        } 
        catch (Exception err) 
        { 
         LogEntry(string.Format("{1} : Database Insert Error : {0}", err, DateTime.Now)); 
         this.CloseConn(); 
         break; 
        }       
       } 
       Flush(); 
      } 
      else 
      { 
       axCZKEM1.GetLastError(ref idwErrorCode); 
       if (idwErrorCode != 0) 
       { 
        LogEntry(string.Format("{0} : Reading data from terminal failed,ErrorCode : {1}", DateTime.Now, idwErrorCode.ToString())); 
       } 
       else 
       { 
        LogEntry(string.Format("{0} : No data from terminal returns!", DateTime.Now)); 
       } 
      } 
      axCZKEM1.Disconnect();     
      LogEntry(string.Format("{0} : Biometric Disconnected", DateTime.Now)); 
      return; 
     } 
     else 
     { 
      LogEntry(string.Format("{0} : Please connect the device", DateTime.Now)); 
      return; 
     } 
    } 

ответ

0

После вашего SSR_GetGeneralLogData, вы можете добавить следующий код

if (axCZKEM1.ClearGLog(iMachineNumber)) 
    { 
     axCZKEM1.RefreshData(iMachineNumber);//the data in the device should be refreshed 
     LogEntry(string.Format("{0} : All att Logs have been cleared from teiminal!, Success", DateTime.Now)); 
    } 
    else 
    { 
     axCZKEM1.GetLastError(ref idwErrorCode); 
     LogEntry(string.Format("{0} : Clear operation failed", DateTime.Now)); 
    } 

Это очистит данные журнала в устройстве (сделать это после того, как вы сохранили данные) и следующей загрузки будет намного быстрее потому что машина всегда будет иметь всего несколько журналов.

Смежные вопросы