-1

我的目标是读取 NFC,它会触发数据库中的数据检查。不同的响应应显示不同的表单/面板(尚未实施)。我尝试过使面板可见/不可见,显示新表单和新用户控件。

除了更新 UI 外,一切正常。我已将 MessageBox 放在 dataBaseGetData 中,它也可以工作。

公共部分类Form1:Form {

    private static string comNumber = "COM1";
    private static string dataBaseServer = "SERVER";
    private static string dataBaseName = "db";
    private static string dataBaseLogin = "login";
    private static string dataBasePassword = "password";
    private static SerialPort portNFC = new SerialPort(comNumber, 9600, Parity.None, 8, StopBits.One);

    public Form1()
    {
        InitializeComponent();
        
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        openSerialPortNFC();
    }

    [STAThread]
    private static void openSerialPortNFC()
    {
        try
        {
            portNFC.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            portNFC.Open();
            portNFC.DiscardInBuffer(); 
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    private static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string received = portNFC.ReadExisting();
        Form1 serialPortProgram = new Form1();
        Thread connectToDatabase = new Thread(() => serialPortProgram.dataBaseGetData(received));
        connectToDatabase.Start();
        Thread.Sleep(1500);
        portNFC.DiscardInBuffer();
    }

    private void dataBaseGetData(string NFCcode)
    {
        try
        {
            string connetionString = @"Data Source=" + dataBaseServer + ";Initial Catalog=" + dataBaseName + ";User ID=" + dataBaseLogin + ";Password=" + dataBasePassword;

            SqlConnection connector;
            connector = new SqlConnection(connetionString);
            connector.Open();

            string query = "select * from tTeacher where wuebCardID = " + "'" + NFCcode + "'";
            SqlCommand command = new SqlCommand(query, connector);

            SqlDataReader reader = command.ExecuteReader();

            reader.Read();
            string received = reader[6].ToString();
            reader.Close();

            if (received.Length > 0)
            {
                MessageBox.Show(this, received);
                Update();
                
            }
            connector.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    private void addUserControl(UserControl userControl)
    {
        userControl.Location = new System.Drawing.Point(586, 395);
        Controls.Clear();
        Controls.Add(userControl);
        userControl.BringToFront();
    }

    new void Update()
    {
        BeginInvoke((Action)delegate ()
        {
            UserControls.LogInWindow uc = new UserControls.LogInWindow();
            addUserControl(uc);
        });
    }
}
4

0 回答 0