Я разработал сервис 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;
}
}