国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#結合數據庫實現驗證識別ID卡內容的方法

2020-01-24 02:38:05
字體:
來源:轉載
供稿:網友

本文所述實例為C#結合數據庫,來驗證所識別的ID卡內容,通過本實例代碼,用戶可以輕松實現對ID卡會員信息的驗證。該實例代碼可實現讀取數據庫,進而逐步實現數據庫連接,數據庫讀取,ID卡讀取,ID卡信息與數據庫內容比對,最終返回結果并告之是否驗證成功。

具體功能代碼如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.OleDb;using System.Runtime.InteropServices;using System.Diagnostics;using System.Collections;namespace IDCard{  public partial class Form1 : Form  {    public Form1()    {      InitializeComponent();    }    public delegate int HookProc(int nCode, int wParam, IntPtr lParam);    static int hHook = 0;    public const int WH_KEYBOARD_LL = 13;    //LowLevel鍵盤截獲,如果是WH_KEYBOARD=2,并不能對系統鍵盤截取,Acrobat Reader會在你截取之前獲得鍵盤。     HookProc KeyBoardHookProcedure;    [DllImport("kernel32")]    public static extern int Beep(int dwFreq, int dwDuration);//讓計算機蜂鳴    string DataPath = "";//數據庫路徑    OleDbConnection con;//OleDbConnection對象,連接數據庫    OleDbCommand cmd;//OleDbCommand對象,執行SQL語句    //鍵盤Hook結構函數     [StructLayout(LayoutKind.Sequential)]    public class KeyBoardHookStruct    {      public int vkCode;      public int scanCode;      public int flags;      public int time;      public int dwExtraInfo;    }    [DllImport("user32.dll")]    public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]    //抽掉鉤子     public static extern bool UnhookWindowsHookEx(int idHook);    [DllImport("user32.dll")]    //調用下一個鉤子     public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);    [DllImport("kernel32.dll")]    public static extern IntPtr GetModuleHandle(string name);    public string getNum(string code)    {      string flag = "";      switch (code)      {        case "048":          flag="0"; break;        case "049":          flag = "1"; break;        case "050":          flag = "2"; break;        case "051":          flag = "3"; break;        case "052":          flag = "4"; break;        case "053":          flag = "5"; break;        case "054":          flag = "6"; break;        case "055":          flag = "7"; break;        case "056":          flag = "8"; break;        case "057":          flag = "9"; break;      }      return flag;    }    public void Hook_Start()    {      // 安裝鍵盤鉤子       if (hHook == 0)      {        KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);        hHook = SetWindowsHookEx(WH_KEYBOARD_LL,             KeyBoardHookProcedure,            GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);        //如果設置鉤子失敗.         if (hHook == 0)        {          Hook_Clear();         }      }    }    //取消鉤子事件     public void Hook_Clear()    {      bool retKeyboard = true;      if (hHook != 0)      {        retKeyboard = UnhookWindowsHookEx(hHook);        hHook = 0;      }      //如果去掉鉤子失敗.       if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");    }    //這里可以添加自己想要的信息處理     string NumCode="";    public int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)    {      if (nCode >= 0)      {        if (wParam == 0x0104 || wParam == 0x0100)        {          KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));          int flag = kbh.vkCode;          switch (flag)          {            case 96:              NumCode += "0"; break;            case 97:              NumCode += "1"; break;            case 98:              NumCode += "2"; break;            case 99:              NumCode += "3"; break;            case 100:              NumCode += "4"; break;            case 101:              NumCode += "5"; break;            case 102:              NumCode += "6"; break;            case 103:              NumCode += "7"; break;            case 104:              NumCode += "8"; break;            case 105:              NumCode += "9"; break;          }          if (flag == 13)          {            if (NumCode.Length != 0)            {              string c = "";              string id = "";              for (int i = 0; i <= NumCode.Length - 3; i += 3)              {                string b = NumCode.Substring(i, 3);                c += getNum(b);              }              id = c;              if (id.Length == 8)//如果卡號為8位              {                //實例化OleDbConnection對象                con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + DataPath);                con.Open();//打開數據庫連接                //實例化OleDbCommand對象,根據ID卡號檢索數據表                cmd = new OleDbCommand("select * from tb_UserInfo where CardID='" + id + "'", con);                OleDbDataReader sdr = cmd.ExecuteReader();//實例化OleDbDataReader對象                sdr.Read();//讀取記錄                txtShowCardID.Text = id;//獲取ID卡號                txtShowName.Text = sdr["UName"].ToString();//獲取員工姓名                cbbShowSex.Text = sdr["USex"].ToString();//獲取員工性別                cbbShowDep.Text = sdr["UDep"].ToString();//獲取員工部門                con.Close();//關閉數據庫連接                Beep(3000, 100);//計算機蜂鳴              }              NumCode = "";            }          }        }      }      return CallNextHookEx(hHook, nCode, wParam, lParam);    }     private void Form1_Load(object sender, EventArgs e)    {      cbbdep.SelectedIndex = 0;//設置部門下拉框的第一項被選中      cbbsex.SelectedIndex = 0;//設置性別下拉框的第一項被選中      //獲取數據庫路徑      DataPath = Application.StartupPath.ToString();      DataPath = DataPath.Substring(0, DataPath.LastIndexOf("http://"));      DataPath = DataPath.Substring(0, DataPath.LastIndexOf("http://"));      DataPath += @"/db.mdb";          }    private void radioButton1_CheckedChanged(object sender, EventArgs e)    {      if (radioButton1.Checked)      {        groupBox1.Enabled = true;        Hook_Clear();      }    }    private void radioButton2_CheckedChanged(object sender, EventArgs e)    {      if (radioButton2.Checked)      {        groupBox1.Enabled = false;        Hook_Start();      }    }    private void button2_Click(object sender, EventArgs e)    {      txtIdcard.Text = "";      txtName.Text = "";    }    private void button1_Click(object sender, EventArgs e)    {      if (txtIdcard.Text == "" || txtName.Text == "")//如果沒有輸入ID卡號和員工姓名      {        //彈出警告信息        if (MessageBox.Show("請將數據填寫完整!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)        {          if (txtIdcard.Text == "")//如果沒有輸入ID卡號            txtIdcard.Focus();//則光標處在輸入ID卡號的文本框          if (txtName.Text == "")//如果沒有輸入員工姓名            txtName.Focus();//則光標處在輸入員工姓名的文本框          if (txtIdcard.Text == "" && txtName.Text == "")//如果都沒輸入數據            txtIdcard.Focus();//則光標處在輸入ID卡號的文本框        }      }      else//如果輸入了數據      {        if (txtIdcard.Text.Trim().Length != 8)//如果輸入的ID卡號不是8位        {          //彈出警告信息          if (MessageBox.Show("ID卡號必須為8位!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)          {            txtIdcard.Text = "";//清空輸入ID卡號的文本框            txtIdcard.Focus();//讓光標處在輸入ID卡號的文本框上          }        }        else//如果輸入的ID卡號為8位        {          //實例化OleDbConnection對象          con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + DataPath);          con.Open();//打開連接          //實例化OleDbCommand對象          cmd = new OleDbCommand("select count(*) from tb_UserInfo where CardID='"+txtIdcard.Text.Trim()+"'", con);          int flag =Convert.ToInt32(cmd.ExecuteScalar());//判斷是否已經添加過此ID卡號          if (flag > 0)//如果大于0則說明已經添加過          {            //彈出警告信息            if (MessageBox.Show("ID卡號已經添加過了!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)            {              button2_Click(sender, e);//清空輸入ID卡號和員工姓名的文本框            }          }          else//如果小于0說明沒有添加過          {            //實例化OleDbCommand對象            cmd = new OleDbCommand("insert into tb_UserInfo(CardID,UName,USex,UDep) values ('" + txtIdcard.Text.Trim() + "','" + txtName.Text.Trim() + "','" + cbbsex.Text.Trim() + "','" + cbbdep.Text.Trim() + "')", con);            int k = cmd.ExecuteNonQuery();//執行insert語句,將輸入的信息添加到數據庫中            if (k > 0)//如果大于0則操作成功            {              //彈出提示信息              if (MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)              {                button2_Click(sender, e);//清空輸入ID卡號和員工姓名的文本框              }            }          }          con.Close();//關閉數據庫連接        }      }    }    private void txtIdcard_KeyPress(object sender, KeyPressEventArgs e)    {      if (!(e.KeyChar <= '9' && e.KeyChar >= '0') && e.KeyChar != '/r' && e.KeyChar != '/b')      {        e.Handled = true;      }    }  }}

該實例注釋完善,便于閱讀,讀者還可以根據自身需求改善代碼,或者添加新的功能以滿足自身應用的個性化需求。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇东市| 驻马店市| 铜鼓县| 清河县| 汉沽区| 林西县| 旬邑县| 夏邑县| 若羌县| 唐山市| 遵义县| 偃师市| 白玉县| 盐池县| 西吉县| 九龙坡区| 西昌市| 临沭县| 大同县| 嫩江县| 巫山县| 阿拉善左旗| 融水| 抚州市| 神木县| 古交市| 剑河县| 正宁县| 宁海县| 苍梧县| 六盘水市| 旬邑县| 米易县| 嘉定区| 平阳县| 临清市| 龙门县| 萨嘎县| 平乡县| 东乡| 无棣县|