c# - 在 C# 中实现 MYSQL 通知系统失败

标签 c# mysql

我有一个带有此表的数据库,用于存储消息 它看起来像这样

数据库:vms2 表:vms_notification

---------------------------------------------------------
|id  | user | sender   |   message         |     date    |
---------------------------------------------------------
|0   | gate| reception | hello i am tesing | 2017 -10-04 |
----------------------------------------------------------

现在这就是表,我创建了一个类,该类应该从数据库中获取消息,并在门口的人登录系统时作为新通知弹出。它是一个 C# winform,所以我希望它检查来自 Mysql 服务器的电子邮件,并在屏幕上创建一个消息框,以便用户在收到新邮件时看到。

我的源代码如下所示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace VisitorManager2
{
    class Notification
    {
        public void NotifyMessenger()
        {
            string constring = "server=localhost;user id=root;database=vms2";
            using (MySqlConnection con = new MySqlConnection(constring))
            {
                string sql = "select * from vms2.vms_notification";
                using (MySqlCommand cmd = new MySqlCommand(sql, con))
                {
                    con.Open();
                    MySqlDataReader rdr = cmd.ExecuteReader();
                    try
                    {
                        string userid = null;
                        string sender;
                        string message;
                        string date;

                        while (rdr.Read())
                        {
                            userid = (rdr["user"].ToString());
                            sender = (rdr["sender"].ToString());
                            message = (rdr["message"].ToString());
                            date = (rdr["date"].ToString());
                        }

                        Loginform login = new Loginform();
                        string username = login.metroComboBox1.Text;

                        if (userid == username)
                        {
                            MessageBox.Show("New Notification!", "New Notification",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        }
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
        }
    }
}

它只是加载启动画面,一旦我登录,它就会再次加载启动画面,甚至不显示来自电子邮件的任何通知。我错过了什么?

最佳答案

首先,您运行一个查询来选择表中的所有行。

其次,运行一个循环来检索所有这些行并仅保存最后一行。最后一个似乎与登录的用户不匹配。

要解决此问题:尝试首先获取用户的登录名,然后运行表单的查询

   select * from vms2.vms_notification where user = 'username'

但是使用绑定(bind)变量(类似这样)来避免 Johnny Droptables 的小问题(查找一下)。

con.Open();
...
string userid = null;
string sender;
string message;
string date;

const string sql = 
   "select * from vms2.vms_notification where user = @username;";

using (var cmd = new MySqlCommand(sql, con))
{
   cmd.Parameters.AddWithValue("@username", username); 
   var rdr = cmd.ExecuteReader();
   while (rdr.Read())
   {
      userid = (rdr["user"].ToString());
      sender = (rdr["sender"].ToString());
      message = (rdr["message"].ToString());
      date = (rdr["date"].ToString());
   }
}

这将从您的表中获取与登录用户相关的一行。如果该用户在表中有多于一行,则只会获取其中一行。

关于c# - 在 C# 中实现 MYSQL 通知系统失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46582887/

相关文章:

c# - 为什么我在 C# WinForms 到 MySQL 数据库的 SELECT 语句中出现此错误?

mysql 加入条件

mysql - Laravel 5.8/Mysql : Cannot delete or update a parent row a foreign key constraint fails

c# - 检测基于纬度/经度的多边形中的点

c# - linq to sql SubmitChanges 不触发具有多个 InsertOnSubmit 或 DeleteOnSubmit 的触发器

c# - 如何更改通过 PrefabUtility.InstantiatePrefab 实例化的 GameObject 的父对象?

c# - 在linq中实现for循环

c# - 用 Moq 替换 Setup 的值

PHP 拒绝在框架网格中显示 mysql 数据

mysql - 我如何让 Rails 使用这个特定的 MYSQL?