Merhabalar.
Ben C# da oldukca yeni sayılırım. Uzun zamandır (10 yıl kadar) PHP kodlama yaptıktan sonra artık windows platformada geceyim dedim ve C# ile başladım. Kısa sürede oldukca yol katetdim diyebilirim.
Neyse ZKSoftware e ait bir parmakizi okuyucu kullanıyorum ve bu cihaz ile online olarak sürekli haberleşip bir geçiş kontrol programı yazdım. Herşey tamam. Yetkilendirme kayıt tutma vs. Ancak cihaz ile bağlantıyı başlattığımda bir sorun yok. Kullanıcılar parmak okuttuğunda yetkisi dahilinde geçiş veriyor yada vermiyor. Fakat bağlantıyı başlattıktan yaklaşık 60 sn kadar sonra cihaz ile hala bağlı olmama rağmen artık cihaza okutulan parmaklara ait yazılıma bir bilgi gelmiyor. Acaba sorun ne olabilir. Kullandığım kodları aşağıda paylaşıyorum. Ayrıca referanlarden zkeemper.dll eklenmiştir.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using zkemkeeper;
using System.Data.OleDb;
using System.Diagnostics;
namespace Takip
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
cihazDoldur();
}
int grubu;
string gunadi;
string detayid;
string gecisdurum;
string sebep;
string kapiid = "1";
int ekran;
string yazi;
int uyedurum;
int iRow = 0;
int iCol = 0;
public static double TarihiUnixeCevir(DateTime dateTime)
{
double unixTime = (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
if (dateTime.IsDaylightSavingTime())
{
unixTime -= 3600;
}
return unixTime;
}
public static DateTime UnixiTariheCevir(double unixTimeStamp)
{
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Data Source=Database/db.accdb");
OleDbCommand komut = new OleDbCommand();
OleDbDataAdapter da;
DataSet ds;
public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
const int NOGroupIndex = 101; // Normally Open
const int NCGroupIndex = 102; // Normally Close
public void cihazDoldur()
{
da = new OleDbDataAdapter("SELECT KapiID, KapiAdi, IP, Port, Yon FROM Kapilar", baglanti);
ds = new DataSet();
baglanti.Open();
da.Fill(ds, "Kapilar");
dataGridView1.DataSource = ds.Tables["Kapilar"];
baglanti.Close();
}
string sifirEkle(string veri, string sayi)
{
for (int i = 0; i < Convert.ToInt32(sayi); i++)
{
veri = "0" + veri;
}
return veri;
}
private bool bIsConnected = false;
private int iMachineNumber = 1;
public object IsInValid { get; private set; }
private void connect_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.CurrentRow.Cells[2].Value.ToString().Trim() == "" || dataGridView1.CurrentRow.Cells[3].Value.ToString().Trim() == "")
{
MessageBox.Show("IP adresi veya Port numarası boş yada yanlış", "Hata");
return;
}
int idwErrorCode = 0;
Cursor = Cursors.WaitCursor;
if (connect.Text == "Seçili Cihazla Bağlantıyı Kes")
{
axCZKEM1.Disconnect();
axCZKEM1.ClearLCD();
yazi = "Sistem";
iRow = 1;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Baglantisi";
iRow = 2;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Yok";
iRow = 3;
iCol = 6;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
this.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
dataGridView1.CurrentRow.Cells[5].Value = "Bağlantı Yok";
bIsConnected = false;
connect.Text = "Seçili Cihaza Bağlan";
durum.ForeColor = Color.Red;
durum.Text = "Hiçbir Cihazla bağlantınız yok";
Cursor = Cursors.Default;
return;
}
bIsConnected = axCZKEM1.Connect_Net(dataGridView1.CurrentRow.Cells[2].Value.ToString(), Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value));
if (bIsConnected == true)
{
axCZKEM1.ClearLCD();
yazi = "Sistem Hazir";
iRow = 1;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Parmaginizi";
iRow = 2;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Okutunuz";
iRow = 3;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
connect.Text = "Seçili Cihazla Bağlantıyı Kes";
connect.Refresh();
durum.ForeColor = Color.Green;
durum.Text = "Seçili Cihaza Bağlanıldı";
dataGridView1.CurrentRow.Cells[5].Value = "Bağlantı Hazır";
iMachineNumber = 1;
if (axCZKEM1.RegEvent(iMachineNumber, 65535))
{
this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
}
}
else
{
axCZKEM1.GetLastError(ref idwErrorCode);
MessageBox.Show("Cihaza bağlanılamadı, Hata Kodu = " + idwErrorCode.ToString(), "Hata");
}
Cursor = Cursors.Default;
}
catch { MessageBox.Show("Önce Bir Cihaz Seçmelisiniz!", "Hata"); }
}
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
{
int sifirsayisi = sEnrollNumber.ToString().Length;
sifirsayisi = 5 - sifirsayisi;
string uyeno = sifirEkle(sEnrollNumber.ToString(), sifirsayisi.ToString());
int uyeid = 0;
string uyeadi = "";
baglanti.Open();
da = new OleDbDataAdapter("SELECT * FROM Uyeler WHERE UyeNo = '" + uyeno + "'", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
baglanti.Close();
if (dt.Rows.Count > 0)
{
/*for (int i = 0; i < dt.Rows.Count; i++)
{*/
uyeid = Convert.ToInt32(dt.Rows[0][0]);
uyeadi = dt.Rows[0][2].ToString() + " " + dt.Rows[0][3].ToString();
uyedurum = Convert.ToInt32(dt.Rows[0][4]);
//}
}
else
{
uyeid = 0;
uyeadi = "Kayıtsız Üye";
}
if (uyeid > 0)
{
// Geçiş yapan üye için geçiş yetkisi kontrolü başlangıcı
if (uyedurum == 1)
{
baglanti.Open();
da = new OleDbDataAdapter("SELECT GecisGrubu, Baslangic, Bitis FROM UyeDetaylari WHERE UyeID = '" + Convert.ToString(uyeid) + "'", baglanti);
DataTable dt2 = new DataTable();
da.Fill(dt2);
baglanti.Close();
DateTime simdi = DateTime.Now;
int kontrol = Convert.ToInt32(TarihiUnixeCevir(simdi).ToString().Substring(0,10));
if (kontrol > Convert.ToInt32(dt2.Rows[0][1]) && kontrol < Convert.ToInt32(dt2.Rows[0][2]))
{
if (dt2.Rows.Count > 0)
{
grubu = Convert.ToInt32(dt2.Rows[0][0]);
}
string haftaniningun = DateTime.Now.DayOfWeek.ToString();
switch (haftaniningun)
{
case "Sunday":
gunadi = "Pazar";
break;
case "Monday":
gunadi = "Pazartesi";
break;
case "Tuesday":
gunadi = "Sali";
break;
case "Wednesday":
gunadi = "Carsamba";
break;
case "Thursday":
gunadi = "Persembe";
break;
case "Friday":
gunadi = "Cuma";
break;
case "Saturday":
gunadi = "Cumartesi";
break;
}
if (grubu != 0)
{
baglanti.Open();
da = new OleDbDataAdapter("SELECT " + gunadi + " FROM GrupDetaylar WHERE GrupID = '" + grubu.ToString() + "' AND KapiID = '" + kapiid + "'", baglanti);
DataTable dt3 = new DataTable();
da.Fill(dt3);
baglanti.Close();
if (dt3.Rows.Count > 0)
{
for (int i = 0; i < dt3.Rows.Count; i++)
{
detayid = dt3.Rows[0].ToString();
baglanti.Open();
int saatbilgi = (iHour * 3600) + (iMinute * 60);
da = new OleDbDataAdapter("SELECT GirisSaat, CikisSaat FROM Saatler WHERE DetayID = '" + detayid + "' AND GirisSaat <= " + saatbilgi + " AND CikisSaat >= " + saatbilgi + "", baglanti);
DataTable dt4 = new DataTable();
da.Fill(dt4);
baglanti.Close();
if (dt4.Rows.Count > 0)
{
int txtDelay = 60;
int iDelay = txtDelay;//time to delay
Cursor = Cursors.WaitCursor;
axCZKEM1.ACUnlock(iMachineNumber, iDelay);
Cursor = Cursors.Default;
gecisdurum = "İzin Verildi";
sebep = "Geçiş İzni Verildi";
ekran = 0;
}
else
{
gecisdurum = "İzin Verilmedi";
sebep = "İzin verilen saatler dışında geçiş";
ekran = 1;
axCZKEM1.PlayVoiceByIndex(2);
}
}
}
else
{
gecisdurum = "İzin Verilmedi";
sebep = "İzin verilen saatler dışında geçiş";
ekran = 1;
axCZKEM1.PlayVoiceByIndex(2);
}
}
else
{
gecisdurum = "İzin Verilmedi";
sebep = "Geçiş Grubu Yok";
ekran = 2;
axCZKEM1.PlayVoiceByIndex(2);
}
}
else
{
if (kontrol < Convert.ToInt32(dt2.Rows[0][1]))
{
gecisdurum = "İzin Verilmedi";
sebep = "Üyelik Başlangıç Tarihine Ulaşılmamış";
ekran = 5;
axCZKEM1.PlayVoiceByIndex(2);
}
if (kontrol > Convert.ToInt32(dt2.Rows[0][2]))
{
gecisdurum = "İzin Verilmedi";
sebep = "Üyelik Süresi Dolmuş";
ekran = 6;
axCZKEM1.PlayVoiceByIndex(2);
}
}
}
else
{
gecisdurum = "İzin Verilmedi";
sebep = "Üye Aktif Değil";
ekran = 4;
axCZKEM1.PlayVoiceByIndex(2);
}
}
else
{
gecisdurum = "İzin Verilmedi";
sebep = "Kayıtlı Olmayan Üye";
ekran = 3;
axCZKEM1.PlayVoiceByIndex(2);
}
// Geçiş yapan üye için geçiş yetkisi kontrolü bitiş
string gun;
string ay;
string saat;
string dakika;
int gunuzunluk = iDay.ToString().Length;
if (gunuzunluk < 2)
{
gun = sifirEkle(iDay.ToString(), 1.ToString());
}
else
{
gun = iDay.ToString();
}
int ayuzunluk = iMonth.ToString().Length;
if (ayuzunluk < 2)
{
ay = sifirEkle(iMonth.ToString(), 1.ToString());
}
else
{
ay = iMonth.ToString();
}
int saatuzunluk = iHour.ToString().Length;
if (saatuzunluk < 2)
{
saat = sifirEkle(iHour.ToString(), 1.ToString());
}
else
{
saat = iHour.ToString();
}
int dakikauzunluk = iMinute.ToString().Length;
if (dakikauzunluk < 2)
{
dakika = sifirEkle(iMinute.ToString(), 1.ToString());
}
else
{
dakika = iMinute.ToString();
}
baglanti.Open();
string ekle = "insert into Gecisler(UyeID,KartNo,Adisoyadi,Kapi,Yon,Durum,Sebep,Tarih) values (@uyeid,@kartno,@uyeadi,@kapi,@yon,@durum,@sebep,@tarih);";
OleDbCommand komut = new OleDbCommand(ekle, baglanti);
komut.Parameters.AddWithValue("@uyeid", uyeid.ToString());
komut.Parameters.AddWithValue("@kartno", uyeno.ToString());
komut.Parameters.AddWithValue("@uyeadi", uyeadi);
komut.Parameters.AddWithValue("@kapi", "1");
komut.Parameters.AddWithValue("@yon", "Giriş");
komut.Parameters.AddWithValue("@durum", gecisdurum);
komut.Parameters.AddWithValue("@sebep", sebep);
string tarih = gun + "." + ay + "." + iYear.ToString() + " " + saat + ":" + dakika;
string tarih2 = TarihiUnixeCevir(Convert.ToDateTime(tarih)).ToString().Substring(0, 10);
komut.Parameters.AddWithValue("@tarih", Convert.ToInt32(tarih2));
komut.ExecuteNonQuery();
baglanti.Close();
System.Threading.Thread.Sleep(2000);
Cursor = Cursors.WaitCursor;
axCZKEM1.ClearLCD();
switch (ekran)
{
case 0:
yazi = "Tesekkurler";
iRow = 1;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Gecebilirsiniz";
iRow = 2;
iCol = 1;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 1:
yazi = "Size izin";
iRow = 0;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Verilen Süreler";
iRow = 1;
iCol = 1;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Disinda";
iRow = 2;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Gecemezsiniz";
iRow = 3;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 2:
yazi = "Gecis";
iRow = 0;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Grubunuz";
iRow = 1;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Yok";
iRow = 2;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 3:
yazi = "Uye";
iRow = 0;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Kaydınız";
iRow = 1;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Bulunamadı";
iRow = 2;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 4:
yazi = "Uyeliginiz";
iRow = 0;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Pasif";
iRow = 1;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Durumdadır";
iRow = 2;
iCol = 3;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 5:
yazi = "Uyeliginizin";
iRow = 0;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Baslangic";
iRow = 1;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Tarihine";
iRow = 2;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Daha var";
iRow = 3;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 6:
yazi = "Uyeliginizin";
iRow = 0;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Suresi";
iRow = 1;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Dolmustur";
iRow = 2;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
case 7:
yazi = "Gecis";
iRow = 0;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Grubunuz";
iRow = 1;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Hatalı";
iRow = 2;
iCol = 5;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
break;
}
System.Threading.Thread.Sleep(3000);
axCZKEM1.ClearLCD();
yazi = "Sistem Hazir";
iRow = 1;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Parmaginizi";
iRow = 2;
iCol = 2;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
yazi = "Okutunuz";
iRow = 3;
iCol = 4;
axCZKEM1.WriteLCD(iRow, iCol, yazi);
Cursor = Cursors.Default;
System.Threading.Thread.Sleep(3000);
label1.Text = "Bekliyor";
}
private void timer1_Tick(object sender, EventArgs e)
{
while (bIsConnected == true)
{
if (axCZKEM1.ReadRTLog(iMachineNumber))
{
while (axCZKEM1.GetRTLog(iMachineNumber))
{
;
}
}
}
}
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:16:42 -->-> Daha önceki mesaj 15:08:44 --
Sorun güvenlik duvarı imiş. Nedense uygulamanın 60 sn süre ile çalışmasına izin verip sonra haberleşmeyi blokluyordu. Devre dışı bıraktım ve sorun çözüldü..