检查MYSQL数据库中的某个表是不是为空C#(骨架表)
Posted
技术标签:
【中文标题】检查MYSQL数据库中的某个表是不是为空C#(骨架表)【英文标题】:Check if a certain Table in MYSQL Database is empty C# (skeleton table)检查MYSQL数据库中的某个表是否为空C#(骨架表) 【发布时间】:2021-12-11 06:07:20 【问题描述】:我的应用程序从登录菜单开始,用户提供他的登录凭据,然后比较密码(散列)的过程继续进行,如果一切正常,则登录,如果出现错误,错误处理程序就会启动。
我的问题是,有没有办法检查目标表是否为空,就像其中没有任何类型的数据(只是数据库中的骨架表)。因为我不愿意让 150 多名员工坐在一起,他们可能会离职、升职、被解雇……所以我想把它留给管理公司 HR 的管理员……
我使用了Form_Activated
事件但没有任何改变,尝试了Form_Initialize
事件没有运气。我在这里做错了什么?
我应该更改我的查询吗?我在这里完全迷失了,因为我阅读了几十个表格,NON甚至接近了!
使用initialize
事件表单提供的代码不起作用。因为它会处理表单,而您无法解决问题,或者至少我无法解决!
try
using (mysqlConnection connection = Connect())
DataTable table = new DataTable("employee");
string checkuserexistance = "select count(uname) from employee";
MySqlCommand command = new MySqlCommand(checkuserexistance, connection);
using (MySqlDataReader reader = command.ExecuteReader())
if (reader.Read() && reader.FieldCount > 0 && reader.HasRows)
Form1_Load(sender, e);
reader.Close();
else
DialogResult dialog = MessageBox.Show("Can not sign in as the given user, would you like to add a user now?", "Empty Database", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialog == DialogResult.Yes)
new Thread(() => new User_Managment().ShowDialog()).Start();
this.Close();
else
Application.Exit();
catch (MySqlException ex)
MessageBox.Show(ex.Message, "Error Connecting to Database!", MessageBoxButtons.OK, MessageBoxIcon.Error);
【问题讨论】:
如果我对您的理解正确,也许可以考虑重构您的应用程序,以便整个登录/存在任何用户过程都采用自己的形式,毕竟您只显示经过身份验证的主表单完成了吗? @AKX,我找到了一个更好的解决方案,结果我只需要编辑我的连接字符串string checkuserexistance = "select LEAST(1,uname) from employee";
感谢您的想法。
【参考方案1】:
您的逻辑当前正在检查是否有任何行返回:
MySqlCommand command = new MySqlCommand("select count(uname) from employee", connection);
using (MySqlDataReader reader = command.ExecuteReader())
if (reader.Read() && reader.FieldCount > 0 && reader.HasRows)
// OK
但是,SELECT COUNT(...)
始终返回(至少)一行,因此您还需要通过读取第零个结果列的值来检查从该单行读取的计数是否大于零。
MySqlCommand command = new MySqlCommand("select count(uname) from employee", connection);
using (MySqlDataReader reader = command.ExecuteReader())
if (reader.Read() && reader.FieldCount > 0 && reader.HasRows && reader.GetInt32(0) > 0)
// OK
【讨论】:
您的答案有效,但正如之前对主要问题的评论中所述,string checkuserexistance = "select LEAST(1,uname) from employee"; MySqlCommand command = new MySqlCommand(checkuserexistance, connection); using (MySqlDataReader reader = command.ExecuteReader()) if (reader.Read() && reader.FieldCount > 0 && reader.HasRows)
这种方法也有效,使用LEAST(1,uname)
成功了谢谢,哥们两种方法都有效✌
我想知道count
和Least
之间有什么区别
他们做的事情完全不同。 select LEAST(1,uname) from employee
将最终让 MySQL 从所有行中检索用户名(并确定它们是大于还是小于 1
),而 COUNT(uname)
(甚至更好,COUNT(*)
)只会计算行数并返回计数。
谢谢你的解释,话虽如此,使用reader.Read() && reader.FieldCount > 0
应该足以知道表格是否数据无效!
不,不是,因为您正在执行一个始终返回一行的查询。如果您真的只想查看HasRows
,则可以执行SELECT id FROM employee LIMIT 1
,因为如果没有员工,则必然不会返回任何行,而如果至少有 1 名员工,则必然返回 1 行。以上是关于检查MYSQL数据库中的某个表是不是为空C#(骨架表)的主要内容,如果未能解决你的问题,请参考以下文章