Else 语句无法在 while 循环中工作
Else statement fails to work within a while loop
下面是我使用 MySqlDataReader 连接到数据库的代码。现在 if 语句工作正常但 else 语句没有。当我在 VS 中使用调试功能时,它一直跳过 else 语句并跳转到 reader.Close();。
任何的想法。谢谢
private void db()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
MySqlConnection connection = new MySqlConnection(constr);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM user Where user_id ='" + Userid.Text + "'" + "And password='" + Password.Text + "'";
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
Label1.Text = reader["user_id"].ToString();
}
else
{
Label1.Text = "nodata";
}
reader.Close();
}
}
首先:不要使用字符串连接来构建查询,而是使用参数化查询!
至于你的问题:我假设这个查询只会 return 1 或 0 行,所以你不需要循环,只需检查
if (reader.Read()) {
//...
}
对列索引使用 SELECT *
有潜在的危险,因为您可能不知道 "first" 列 returned 是什么。我建议在查询中命名您想要的列
SELECT user_id, user_name ... FROM ...
第一列的值是多少 returned?我想,它是 user_id
。因此,这永远无法满足条件 IsDBNull(0)
,因为 user_id
是 WHERE
子句中的匹配条件。如果您的 WHERE
子句不匹配 table 中的任何记录,reader.Read()
将已经失败,因此您将永远无法到达 else 分支。
此外,我建议使用 using
子句,它将自动处理 reader,因此您不必关心关闭它。
command.CommandText = "SELECT user_id, foo, bar from user where user_id = @userid and password = @password";
command.Parameters.AddWithValue("@user_id", UserId.Text);
command.Parameters.AddWithValue("@password", Passowrd.Text);
using (MySqlDataReader reader = command.ExecuteReader()) {
if (reader.Read()) {
Label1.Text = reader["user_id"].ToString();
} else {
Label1.Text ="nodata";
}
}
下面是我使用 MySqlDataReader 连接到数据库的代码。现在 if 语句工作正常但 else 语句没有。当我在 VS 中使用调试功能时,它一直跳过 else 语句并跳转到 reader.Close();。 任何的想法。谢谢
private void db()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
MySqlConnection connection = new MySqlConnection(constr);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM user Where user_id ='" + Userid.Text + "'" + "And password='" + Password.Text + "'";
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
Label1.Text = reader["user_id"].ToString();
}
else
{
Label1.Text = "nodata";
}
reader.Close();
}
}
首先:不要使用字符串连接来构建查询,而是使用参数化查询!
至于你的问题:我假设这个查询只会 return 1 或 0 行,所以你不需要循环,只需检查
if (reader.Read()) {
//...
}
对列索引使用 SELECT *
有潜在的危险,因为您可能不知道 "first" 列 returned 是什么。我建议在查询中命名您想要的列
SELECT user_id, user_name ... FROM ...
第一列的值是多少 returned?我想,它是 user_id
。因此,这永远无法满足条件 IsDBNull(0)
,因为 user_id
是 WHERE
子句中的匹配条件。如果您的 WHERE
子句不匹配 table 中的任何记录,reader.Read()
将已经失败,因此您将永远无法到达 else 分支。
此外,我建议使用 using
子句,它将自动处理 reader,因此您不必关心关闭它。
command.CommandText = "SELECT user_id, foo, bar from user where user_id = @userid and password = @password";
command.Parameters.AddWithValue("@user_id", UserId.Text);
command.Parameters.AddWithValue("@password", Passowrd.Text);
using (MySqlDataReader reader = command.ExecuteReader()) {
if (reader.Read()) {
Label1.Text = reader["user_id"].ToString();
} else {
Label1.Text ="nodata";
}
}