检查MYSQL数据库中的某个Table是否为空C#(骨架table)
Check if a certain Table in MYSQL Database is empty C# (skeleton table)
我的应用程序从登录菜单开始,用户提供他的登录凭据,然后继续比较密码(散列)的过程,如果一切正常则登录,如果出现错误则错误处理程序启动。
我的问题是,有没有办法检查目标 table 是否为空,就像其中没有任何类型的数据(只是数据库中的框架 table)。因为我不愿意 150 多名员工加入 table 他们可能会离职、升职和被解雇...所以我想把它留给管理员 运行 公司的人力资源部.. .
我使用了 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);
}
您的逻辑当前正在检查是否有返回的行:
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(...)
总是 returns(至少)一行,因此您还需要通过读取第零个结果来检查从该单行读取的计数是否大于零列的值。
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
}
}
我的应用程序从登录菜单开始,用户提供他的登录凭据,然后继续比较密码(散列)的过程,如果一切正常则登录,如果出现错误则错误处理程序启动。
我的问题是,有没有办法检查目标 table 是否为空,就像其中没有任何类型的数据(只是数据库中的框架 table)。因为我不愿意 150 多名员工加入 table 他们可能会离职、升职和被解雇...所以我想把它留给管理员 运行 公司的人力资源部.. .
我使用了 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);
}
您的逻辑当前正在检查是否有返回的行:
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(...)
总是 returns(至少)一行,因此您还需要通过读取第零个结果来检查从该单行读取的计数是否大于零列的值。
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
}
}