id读卡器 mysql_RFID设备管理C#客户端学习笔记之4:更新数据库

这篇博客介绍了如何在C#客户端应用中与MySQL数据库进行交互,包括获取本地IP地址、从数据库加载人员信息到ComboBox、将RFID读卡器数据插入数据库,并提供了手动开启和关闭服务器端程序的方法。通过rfid_DBhelper类实现了数据库操作,HandleFeedback类处理RFID设备的反馈数据。
摘要由CSDN通过智能技术生成

事实上,前面的客户端是不够完善的,我们要自动获取IP,还要从数据库中选择工作人员。

除此之外手动控制服务器关闭也是有必要的……像下图所示的效果:

2f5f52bbebff1c1c3f28ccbedf7c0758.png

图1  收到读写器的消息之后立即插入到数据库

1d90fce6cd7ff0fb24f19c2b3750c171.png

图2 开启、打开服务器

1、获取当前主机IP地址

/// 

/// 获取本机地址列表

/// 

public List GetLocalAddresses()

{

// 获取主机名

string strHostName = Dns.GetHostName();

// 根据主机名进行查找

IPHostEntry iphostentry = Dns.GetHostEntry(strHostName);

List iplist = new List();

foreach (IPAddress ipaddress in iphostentry.AddressList)

{//过滤IPv6地址

if (ipaddress.ToString().Length 

{

iplist.Add(ipaddress.ToString());

}

}

return iplist;

}

启动时调用

//为cb_ips添加本地ip

List IPs = GetLocalAddresses();

if (IPs.Count() > 0)

{

this.cb_IPs.Items.Clear();

foreach (var i in IPs)

{

cb_IPs.Items.Add(i);

}

cb_IPs.SelectedIndex = 0;

}

2、查询“人员表”,添加到ComboBox中

2.1 rfid_DBHelper.cs(调用了MySqlHelper.cs,源码)

/// 

/// 自己定制一些增删改查功能

/// 

public abstract class rfid_DBhelper

{

static string connectionString =

"Database='rfid2';Data Source='localhost';User Id='uid';Password='psd';charset='utf8';pooling=true";

/// 

/// 获取下拉列表的dataset

/// 

/// dataset

public static DataSet getComboBox()

{

//Debug.WriteLine("【dbhelper】");

string sql = "select * from tb_people";

DataSet ds = MySqlHelper.GetDataSet(connectionString, CommandType.Text, sql, null);

return ds;

}

/// 

/// 插入数据到iohistory中

/// 

/// 

/// 

/// 

/// 受影响的行数

public static int insert_iohistory(string epc, int hander, DateTime dt)

{

string sql =

string.Format("insert into tb_iohistory(tagID,hander,occorTime) values('{0}','{1}','{2}')", epc, hander, dt);

Debug.WriteLine(sql);

return MySqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql, null);

}

}

2.2 HandleFeedback.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Diagnostics;

using System.Collections;

namespace Ex02_wifiServer

{

public class HandleFeedback

{

public string type { get; set; }//指令类型

List devices = new List();

public void processDevIO(out bool isOK, string code, string h = "1001")

{

//识别失败回:(E4 04 82)头,(00 )usercode (05)Status ,( 91)Checksum

//识别成功回:(E0 10 82)头,(00 )usercode (01)天线号 ,(12 34 00 00 00 00 00 00 00 00 00 10)ID,(37)Checksum

string[] strs = code.Split(' ');

int hander = Convert.ToInt32(h);

DateTime datetime = DateTime.Now;

if (strs[4] == "05")

{

Debug.WriteLine("【handle feedback】识别失败。");

isOK = false;

return;

}

else

{

StringBuilder epc = new StringBuilder();

//1、只选择EPC区,12个字节

epc.Append(strs[5]);

for (int i = 6; i 

{

epc.Append(' ' + strs[i]);

}

Debug.WriteLine("【handle feedback】{0},{1},{2}", epc, hander, datetime);//test ok

if (rfid_DBhelper.insert_iohistory(epc.ToString(), hander, datetime) != 0)

{

//插入成功

isOK = true;

//插入过程除了点问题,暂时删除外键

//ALTER TABLE `tb_iohistory` DROP FOREIGN KEY `fk_io_tag`;

}

else

{

isOK = false;

}

return;

}

}

}

}

2.3 调用

//动态绑定cb_people下拉列表

cb_people.DataSource = rfid_DBhelper.getComboBox().Tables[0];

cb_people.ValueMember = "personID";

cb_people.DisplayMember = "Name";

3、手动开启和关闭服务器端程序

开启服务器按钮调用StartServer(),关闭服务器按钮调用StopServer()

/// 

/// 启动服务器

/// 

private void ServerStart()

{

data = "等待用户连接……\n";

richTextBox1.AppendText(data);

richTextBox1.Focus();

toolStripStatusLabel1.Text = DateTime.Now + ":服务器已经打开";

btn_start.Enabled = false;

btn_stop.Enabled = true;

//定义线程开始

server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ipadd = IPAddress.Parse(server_ip);

IPEndPoint ipe = new IPEndPoint(ipadd, server_port);

try

{

server_socket.Bind(ipe);

server_socket.Listen(100);

}

catch (Exception ee)

{

MessageBox.Show(ee.Message);

return;

}

server_thread = new Thread(Run);

//后台线程将会随着主线程的退出而退出

server_thread.IsBackground = true;

server_thread.Start(server_socket);

}

/// 

/// 关闭服务器

/// 

private void ServerStop()

{

try

{

toolStripStatusLabel1.Text = DateTime.Now+":服务器已经关闭";

richTextBox1.AppendText("服务器已经关闭\n");

btn_start.Enabled = true;

btn_stop.Enabled = false;

//注意先关闭socket,再停止线程

foreach (var i in dicSocket)

{

i.Value.Close();

}

foreach (var i in dicThread)

{

i.Value.Abort();

}

server_socket.Close();

server_thread.Abort();

}

catch (Exception ex)

{

toolStripStatusLabel1.Text = "关闭出现异常:" + ex;

throw;

}

}

4、RFID读写器读到的结果插入到数据库

在RecMsg(object o)中添加

//交给HandleFeedback去处理

bool isInsertOK = false;

HandleFeedback hander = new HandleFeedback();

hander.processDevIO(out isInsertOK, str, worker);

if (isInsertOK)

{

toolStripStatusLabel1.Text = "添加事件成功";

}

else

{

toolStripStatusLabel1.Text = "添加事件失败";

}

其中str是接收到的字符串。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值