Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中使用zKemKeeper连接考勤机?_C#_Asp.net_Biometrics_Time And Attendance - Fatal编程技术网

如何在C#中使用zKemKeeper连接考勤机?

如何在C#中使用zKemKeeper连接考勤机?,c#,asp.net,biometrics,time-and-attendance,C#,Asp.net,Biometrics,Time And Attendance,我正在使用asp.net c#开发考勤软件,当我尝试使用asp.net c#连接生物识别设备(考勤打孔机)时,显示错误 错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。” 我的代码: //internal Axzkemkeeper.AxCZKEM AxCZKEM1; //public Axzkemkeeper.AxCZKEM axCZKEM1 = new Axzkemkeeper.AxCZKEM(); //public zkemkeeper.CZKEM axCZK

我正在使用asp.net c#开发考勤软件,当我尝试使用asp.net c#连接生物识别设备(考勤打孔机)时,显示错误

错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。”

我的代码:

//internal Axzkemkeeper.AxCZKEM AxCZKEM1;
    //public Axzkemkeeper.AxCZKEM axCZKEM1 = new Axzkemkeeper.AxCZKEM();
    //public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
    //public delegate int DecompressMCX(int hComp,IntPtr in, uint in_len, IntPtr out, ref uint out_len, bool eod);

    public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();

private void Essl_Connect(string IpAddress, int MachineNo)
    {
        try
        {
            bConn = axCZKEM1.Connect_Net(IpAddress.Trim(), 8080);
            //bConn = axCZKEM1.Connect_Net(IpAddress.Trim(), 4370);
            if (bConn == true)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "alert('Connected')", true);
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "alert('Not Connected')", true);
            }
        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "Error Message", "alert('" + ex.Message.ToString() + "')", true);
        }
    }
如果有人纠正此问题,是否有其他方法连接机器

如果我使用

public zkemceper.CZKEMClass axCZKEM1=new zkemceper.CZKEMClass()

它显示以下错误:

“无法嵌入互操作类型'zkemceeper.CZKEMClass'。请改用适用的接口。”

  • 使用C#.NET将生物识别考勤机与.NET连接。 现在在connect按钮的click事件上编写下面的代码

    首先声明连接对象:

    public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
    private void btnconnect_Click(object sender, EventArgs e)
    {
        try
        {
            bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370);   // 4370 is port no of attendance machine
            if (bIsConnected == true)
            {
                MessageBox.Show("Device Connected Successfully");
            }
            else
            {
                MessageBox.Show("Device Not Connect");
            }
        }
    
        Catch( (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
    
  • 使用C#.NET从数据库中的生物特征考勤机下载考勤日志

    在“下载考勤”按钮的“单击”事件中写入以下代码:

    private bool IsRead = false;
    string dwEnrollNumber;
    int dwVerifyMode, dwInOutMode, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond,           dwWorkcode, dwMachineNumber;
    public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
    
    public class ClsMachineBL
    {
        public String DownloadDataFromBiomatrix(ClsMachineML prp)
        {
            try
            {
                string constr = CommonConnection.ConStr;
                con = new SqlConnection(constr);
                con.Open();
                cmd = new SqlCommand("Prc_InsertDatafromBiomatrix", con);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                cmd.Parameters.AddWithValue("@dwMachineNumber", prp.dwMachineNumber);
                cmd.Parameters.AddWithValue("@dwEnrollNumber", prp.dwEnrollNumber);
                cmd.Parameters.AddWithValue("@dwVerifyMode", prp.dwVerifyMode);
                cmd.Parameters.AddWithValue("@dwInOutMode", prp.dwInOutMode);
                cmd.Parameters.AddWithValue("@dwYear", prp.dwYear);
                cmd.Parameters.AddWithValue("@dwMonth", prp.dwMonth);
                cmd.Parameters.AddWithValue("@dwDay", prp.dwDay);
                cmd.Parameters.AddWithValue("@dwHour", prp.dwHour);
                cmd.Parameters.AddWithValue("@dwMinute", prp.dwMinute);
                cmd.Parameters.AddWithValue("@dwSecond", prp.dwSecond);
                cmd.Parameters.AddWithValue("@dwWorkcode", prp.dwWorkcode);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                BL.clsCommon objerr = new BL.clsCommon();
                objerr.InesrtError("Error IS " + ex.Message + "_" + ex.StackTrace);
            }
            finally
            {
                cmd.Dispose();
                con.Close();
                con.Dispose();
            }
            return result;
        }
    }
    
    public class ClsMachineML
    {
        public string Id { get; set; }
        public string MachineNo { get; set; }
        public string MachineIP { get; set; }
        public string PortNo { get; set; }
        public string Remark { get; set; }
        public string Tuser { get; set; }
        public string Tdate { get; set; }
        public string Status { get; set; }
        public int  dwMachineNumber { get; set; }
        public string dwEnrollNumber { get; set; }
        public int dwVerifyMode { get; set; }
        public int dwInOutMode { get; set; }
        public int dwYear { get; set; }
        public int dwMonth { get; set; }
        public int dwDay { get; set; }
        public int dwHour { get; set; }
        public int dwMinute { get; set; }
        public int dwSecond { get; set; }
        public int dwWorkcode { get; set; }
        public string User_Id { get; set; }
        public string Name { get; set; }
        public int Finger_Index { get; set; }
        public string Finger_Image { get; set; }
        public int Privilege { get; set; }
        public string Passwords { get; set; }
        public bool Enabled { get; set; }
        public int Flag { get; set; }
        public string  Fromdate { get; set; }
        public string Todate { get; set; }
    }
    
    private void btndownload_Click(object sender, EventArgs e)
    {
         ClsMachineBL obj = new ClsMachineBL();
         ClsMachineML prp = new ClsMachineML();
    
        try
        {
            if (cbmachine.Text == "" || cbmachine.Text == "Select")
            {
                MessageBox.Show("Please Select Machine");
                cbmachine.Focus();
                return;
            }
    
            progressBar1.Visible = true;
              bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370);   // 4370 is port no of attendance machine
            if (bIsConnected == true)
            {
                IsRead = axCZKEM1.ReadGeneralLogData(dwMachineNumber);
                if (IsRead == true)
                {
                    progressBar1.Maximum = 100;
                    progressBar1.Step = 1;
                    progressBar1.Value = 0;
                    while (axCZKEM1.SSR_GetGeneralLogData(dwMachineNumber, out dwEnrollNumber, out dwVerifyMode, out dwInOutMode, out dwYear, out                                dwMonth, out dwDay, out dwHour, out dwMinute, out dwSecond, ref dwWorkcode))
                    {
                        prp.dwDay = dwDay;
                        prp.dwEnrollNumber = dwEnrollNumber;
                        prp.dwHour = dwHour;
                        prp.dwInOutMode = dwInOutMode;
                        prp.dwMachineNumber = dwMachineNumber;
                        prp.dwMinute = dwMinute;
                        prp.dwMonth = dwMonth;
                        prp.dwSecond = dwSecond;
                        prp.dwVerifyMode = dwVerifyMode;
                        prp.dwWorkcode = dwWorkcode;
                        prp.dwYear = dwYear;
                        string add = obj.DownloadDataFromBiomatrix(prp);
                        progressBar1.PerformStep();
                    }
    
                    string export = obj.ExportToAttendance(prp);
                    MessageBox.Show("Attendance Downloaded Successfully");
                    progressBar1.Visible = false;
                }
                else
                {
                    MessageBox.Show("No Log Found....");
                    progressBar1.Visible = false;
                }
            }
            else
            {
                MessageBox.Show("Device Not Connected");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
    
  • 使用C#.NET从数据库中的生物特征考勤机中删除考勤日志

  • 确保regstr正确的dll文件x64/x32
  • 将此代码添加到创建类的代码的顶部

    [SecurityPermission(SecurityAction.Assert,Unrestricted=true)]


  • 将dll interop.zkemkeeper的(属性)更改为False,嵌入类型为False。

    我认为您的第一个代码段中的
    Catch((异常示例)
    在语法上是不正确的。这对我来说是正确的答案。它起到了很好的作用
    public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
    private void btndownload_Click(object sender, EventArgs e)
    {
        bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370);   // 4370 is port no of attendance machine
        if (bIsConnected == true)
        {
            bool delete = axCZKEM1.ClearGLog(dwMachineNumber);
            if (delete == true)
            {
                MessageBox.Show("Deleted.....");
            }
            if (delete == false)
            {
                MessageBox.Show("No Log Found To Delete.....");
            }
        }
    }