您的位置:首页 > 数据库 > MySQL

wpf做的连接mysql数据库项目——jingyanzongjie

2017-11-23 13:53 1231 查看
做的一个小Demo:

实现的功能如下:接收底层硬件发送来的数据,通过串口接收存到数据库,分别发送1,2,3,代表三个人,底层每刷一次RFID,上位机就要根据发送数据判断所来人员是谁,并同时弹出界面,显示该数据插入数据库。

实现步骤:1,本机上安装数据库mysql,建立好表和字段。2.安装连接Mysql的组件MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0。并将MySQLDriverCS.dll引用到项目中去(引用方法,右键项目-》添加-》引用即可)3.开发项目编写

代码实现:1连接串口并能实现数据接收,2.在接受数据同时判断数据并插入数据到相应数据库中 3.设置定时时间,每次接收文本框中信息变化时,利用TextChanged事件:设置定时new出子窗口显示数据库中记录并且定时时间到时将窗口隐藏起来。

另外将窗口居中显示:用WindowStratLocation ="CenterScreen"

关键代码:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using MySQLDriverCS;

using System.Windows.Threading;

using System.IO.Ports;

using System.Timers;

using System.Threading;

using Timer = System.Timers.Timer;

namespace Application1

{

    /// <summary>

    /// MainWindow.xaml 的交互逻辑

    /// </summary>

    /// 

   

    public partial class MainWindow : Window

    {

        private DispatcherTimer ShowTimer;

        SerialPort mySerialPort = new SerialPort();//定义一个串口实例

        string[] portsName = SerialPort.GetPortNames();

      //  bool flag = true;

        Card card2 = new Card();

        System.Timers.Timer aTimer = new System.Timers.Timer();//定义定时器用来定时向数据库插入数据

       

        //接收数据并显示函数

        string str = null;

        string strs = null;

        //窗口初始化

        public MainWindow()

        {

            InitializeComponent();

            ShowTimer = new System.Windows.Threading.DispatcherTimer();

            ShowTimer.Tick += new EventHandler(ShowCurTimer);//起个Timer一直获取当前时间

            ShowTimer.Interval = new TimeSpan(0, 0, 0, 1, 0);

            ShowTimer.Start();

            

        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接收事件

        {

            MySQLConnection mysqlconn = null;

            //this.Dispatcher.BeginInvoke(new Action(() => card.Show()));

            //在下面修改所连接数据库的用户名和密码(下面的连接的数据库的用户名是root,密码是123)

            //要根据自己安装的数据库设置的用户名和密码来修改,比如你安装Mysql数据库时设置的用户名是root2,密码是123456,

            //那么就要把下面的root改成root2,123改为123456即可

            mysqlconn = new MySQLConnection(new MySQLConnectionString("localhost", "c#", "root", "123").AsString);

            mysqlconn.Open();

           strs= mySerialPort.ReadExisting();//字符串方式读//字符串方式读

           // this.Dispatcher.BeginInvoke(new Action(() => txtBox1.Text = str));

           str = strs.Substring(0, 1);

            if (str == "1")

            {

                this.Dispatcher.BeginInvoke(new Action(() => txtBox1.Text = "张三"));

                string str2 = "INSERT INTO card2(id,username,time)VALUES('" + (1) + "','" + "张三" + "','" + (DateTime.Now.ToString()) + "')";//,'" + (DateTime.Now.ToString()) + "'

                MySQLCommand mysqlcommand = new MySQLCommand(str2, mysqlconn);

                mysqlcommand.ExecuteNonQuery();

            }

            else if (str == "2")

            {

                this.Dispatcher.BeginInvoke(new Action(() => txtBox1.Text = "李四"));

                string strcon2 = "INSERT INTO card2(id,username,time)VALUES('" + (2) + "','" + "李四" + "','" + (DateTime.Now.ToString()) + "')";//,'" + (DateTime.Now.ToString()) + "'

                MySQLCommand mysqlcommand2 = new MySQLCommand(strcon2, mysqlconn);

                mysqlcommand2.ExecuteNonQuery();

            }

            else if (str == "3")

            {

                this.Dispatcher.BeginInvoke(new Action(() => txtBox1.Text = "王五"));

                string strcon3 = "INSERT INTO card2(id,username,time)VALUES('" + (3) + "','" + "王五" + "','" + (DateTime.Now.ToString()) + "')";//,'" + (DateTime.Now.ToString()) + "'

                MySQLCommand mysqlcommand3 = new MySQLCommand(strcon3, mysqlconn);

                mysqlcommand3.ExecuteNonQuery();

            }

            mysqlconn.Close();

        }

        //加载窗口

        private void Window_Loaded(object sender, RoutedEventArgs e)

        {

            foreach (string com in System.IO.Ports.SerialPort.GetPortNames())//自动获取串行口名称  

                combox1.Items.Add(com);

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

        }

    

        //获取当前时间:成功

        #region

        public void ShowCurTimer(object sender, EventArgs e)

        {

            //"星期"+DateTime.Now.DayOfWeek.ToString(("d"))

            //获得星期几

            this.txtBck1.Text = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-cn"));

            this.txtBck1.Text += " ";

            //获得年月日

            this.txtBck1.Text += DateTime.Now.ToString("yyyy年MM月dd日");   //yyyy年MM月dd日

            this.txtBck1.Text += " ";

            //获得时分秒

            this.txtBck1.Text += DateTime.Now.ToString("HH:mm:ss");

        }

        #endregion

        //打开串口的方法:正常

        #region

        private void OpenSerialPort()

        {

            if (mySerialPort.IsOpen)

            {

                btn_Port.Content = "打开串口";

                mySerialPort.Close();

                MessageBox.Show("串口已关闭");

            }

            else

            {

                if (portsName.Length > 0)

                {

                    Array.Sort(portsName);

                    mySerialPort.PortName = portsName[0];

                    mySerialPort.BaudRate = 9600;

                    mySerialPort.Parity = Parity.None;

                    mySerialPort.StopBits = StopBits.One;

                    try

                    {

                        mySerialPort.Open();

                        if (mySerialPort.IsOpen)

                        {

                            btn_Port.Content = "关闭串口";

                            MessageBox.Show("已打开");

                            btn_Port.Tag = "close";

                        }

                    }

                    catch

                    {

                        MessageBox.Show("串口被占用!");

                        return;

                    }

                }

                else

                {

                    btn_Port.Tag = "open";

                    btn_Port.Content = "打开串口";

                    MessageBox.Show("没有找到串口");

                }

            }

        }

        #endregion

        //打开串口:正常

        private void btn_Port_Click(object sender, RoutedEventArgs e)

        {

            OpenSerialPort();//打开串口

        }

        //发送数据正常

        #region

        priv
a0b2
ate void btn_Open_Click(object sender, RoutedEventArgs e)

        {

            SendData.Send_Data (0xaa,mySerialPort );

        }

        private void btn_Close_Click(object sender, RoutedEventArgs e)

        {

             SendData.Send_Data (0xbb,mySerialPort );

        }

        public void TimerMange()

        {

            aTimer.Elapsed += new ElapsedEventHandler(ShowData);    //定时事件的方法

            aTimer.Interval = 6000;//此处可以设置定时时间,时间到就进入事件处理

            aTimer.Enabled = false;

        }

        public void ShowData(object sender, EventArgs e)

        {

            

            this.Dispatcher.BeginInvoke(new Action(() => card2.Hide()));

            

        }

        //Text内容改变触发事件

        private void txtBox1_TextChanged(object sender, TextChangedEventArgs e)

        {

            ////MySQLConnection mysqlconn = null;

            //////this.Dispatcher.BeginInvoke(new Action(() => card.Show()));

           

            //////在下面修改所连接数据库的用户名和密码(下面的连接的数据库的用户名是root,密码是123)

            //////要根据自己安装的数据库设置的用户名和密码来修改,比如你安装Mysql数据库时设置的用户名是root2,密码是123456,

            //////那么就要把下面的root改成root2,123改为123456即可

            ////mysqlconn = new MySQLConnection(new MySQLConnectionString("localhost", "c#", "root", "123").AsString);

            ////mysqlconn.Open();

            try

            {

                Card card2 = new Card();//这一句很重要,,,每次重新new一个出来,之前没有这句显示出来的窗口还是上次的,只是用hide()被隐藏起来而已。

                this.Dispatcher.BeginInvoke(new Action(() => card2.Show ()));

                Thread t = new Thread(() =>

                {

                    Thread.Sleep(6000);//次线程休眠1秒

                    Dispatcher.Invoke(new Action(() =>

                    {

                        this.Dispatcher.BeginInvoke(new Action(() => card2.Hide ())); 

                    }));

                });

                t.Start();

           

            }

            

            catch

            {

                MessageBox.Show("数据录入错误");

            }

            

          

            

        }

        private void btn_Watch_Click(object sender, RoutedEventArgs e)

        {

            Card card2 = new Card();

            card2.Show();

            //this.Dispatcher.BeginInvoke(new Action(() => card.Show())); 

        }

        

    }

   public  class SendData

    {

       //面向对象编程

       public static  void Send_Data(byte data,SerialPort yourPort )

        {

            byte[] planData = new byte[1] { data };

           yourPort.Write(planData, 0, 1);

        }

    }

      #endregion 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WPF 数据库