亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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;      }    }  }}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美在线看| 国产精品久久久久久久9999| 最近2019中文字幕大全第二页| 日韩美女主播视频| 亚洲精品久久久久久久久久久| 国产午夜精品免费一区二区三区| 日韩一区二区精品视频| 国产欧美精品va在线观看| 亚洲最大的网站| 国产aⅴ夜夜欢一区二区三区| 久久精品国产欧美亚洲人人爽| 亚洲福利在线观看| 国产亚洲欧美一区| 久久天天躁狠狠躁夜夜躁| 在线看片第一页欧美| 中文字幕亚洲欧美| 国产精品av网站| 亚洲图片欧美午夜| 亚洲天堂久久av| 成人高h视频在线| 久久精品国产99国产精品澳门| 国产精品偷伦视频免费观看国产| 精品女厕一区二区三区| 国产精品第100页| 九九久久精品一区| 一本大道久久加勒比香蕉| 国产欧美一区二区三区四区| 97在线视频免费| 高清欧美性猛交xxxx| 欧美激情成人在线视频| 国产精品欧美久久久| 亚洲精品电影网| 国产日韩av在线播放| 国产午夜精品一区理论片飘花| 欧美亚洲日本黄色| 欧美黄色片免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产99久久精品一区二区永久免费| 国产91精品久久久久久| 欧美性69xxxx肥| 亚洲国产精品99| 性色av香蕉一区二区| 亚洲欧美另类中文字幕| 日韩av免费在线看| 色噜噜久久综合伊人一本| 日韩电影大全免费观看2023年上| 亚洲精品福利资源站| 日本精品中文字幕| 国产成人精品久久二区二区| 91精品免费看| 国产极品精品在线观看| 欧美韩国理论所午夜片917电影| 日韩欧美黄色动漫| 欧美最猛性xxxxx免费| 亚洲第一福利在线观看| 日韩av综合网| 亚洲精品女av网站| 久久久久久91| 亚洲成人精品av| 国产成人av网| 亚州精品天堂中文字幕| 亚洲一区二区日本| 亚洲一区二区三区视频| 欧美大片免费观看| 日韩乱码在线视频| 亚洲自拍偷拍色片视频| www.日本久久久久com.| 亚洲视频在线观看网站| 亚洲丁香久久久| 51ⅴ精品国产91久久久久久| 亚洲免费高清视频| 日本成熟性欧美| 亚洲天堂一区二区三区| 亚洲成人av在线| 久久99久国产精品黄毛片入口| 国产精品视频自在线| 奇米四色中文综合久久| 欧美日韩激情美女| 久久精品亚洲一区| 91免费的视频在线播放| 欧美电影电视剧在线观看| 亚洲欧美激情另类校园| 国产日韩中文在线| 欧美精品video| 91亚洲精品久久久| 午夜精品福利电影| 91免费在线视频| 久久成人免费视频| 久久久91精品国产| 亚洲国产91精品在线观看| 久久免费福利视频| 欧美另类极品videosbest最新版本| 日韩综合视频在线观看| 国产精品igao视频| 综合av色偷偷网| 欧美日韩国产中文精品字幕自在自线| 成人免费视频网| 久久精视频免费在线久久完整在线看| 欧洲成人在线视频| 成人免费视频a| 亚洲综合第一页| www.欧美视频| 亚洲欧美激情视频| 国产欧美日韩亚洲精品| 国产日韩综合一区二区性色av| 91久久久亚洲精品| 国产日韩在线播放| 国产精品嫩草影院一区二区| 日韩在线www| 中文一区二区视频| 成人动漫网站在线观看| 国产91av在线| 亚洲国产精品系列| 亚洲国产精品悠悠久久琪琪| 91免费的视频在线播放| 中文字幕国产精品| 亚洲欧美激情在线视频| 成人国产精品一区| 欧美日韩免费观看中文| 久久国产精品久久精品| 久久成人亚洲精品| 黑人巨大精品欧美一区二区三区| 国产69精品99久久久久久宅男| 色妞欧美日韩在线| 国产亚洲精品一区二区| 亚洲精品少妇网址| 69av视频在线播放| 国内精品400部情侣激情| 在线亚洲午夜片av大片| 国模精品一区二区三区色天香| 国产欧美在线播放| 国产成人精品一区二区三区| 色无极亚洲影院| 国外成人免费在线播放| 7777精品视频| 亚洲国产精品小视频| 久久人人爽国产| 伊是香蕉大人久久| 欧美日韩国产精品一区二区不卡中文| 俺也去精品视频在线观看| 播播国产欧美激情| 国产精品永久免费在线| 亚洲欧美资源在线| 国产精品免费观看在线| 亚洲福利视频专区| 亚洲综合国产精品| 久久天天躁狠狠躁夜夜av| 国产精品香蕉国产| 亚洲欧洲一区二区三区在线观看| 亚洲高清色综合| 国产精品wwww| 久久99青青精品免费观看| 日本成人在线视频网址| 欧美日韩成人在线视频| 国产视频丨精品|在线观看| 成人免费视频xnxx.com| 久久久亚洲国产天美传媒修理工| 欧美午夜电影在线| 亚洲精品在线观看www| 国产精品福利观看| 日韩电影在线观看免费| 国产精品视频最多的网站| 精品久久香蕉国产线看观看亚洲| 色av吧综合网|