[英].Rows.Count always returns -1 even if record in database already exists?
基本上我想使用 c# 检查数据库中是否已经存在用户名。 如果没有 - 它必须被创建。 下面是正是这样做的代码(在我看来只有检查部分很重要,但我已经添加了添加部分的代码)
问题是不管它是否存在,它总是返回 -1
public Boolean checkUser()
{
var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2");
var table = new DataTable();
connection.Open();
string checkUsernameQuery = "SELECT * FROM accounts WHERE username = 'usernameInputField.Text'";
var adapter = new MySqlDataAdapter();
MySqlCommand command = new MySqlCommand(checkUsernameQuery, connection);
//command.Parameters.Add("@username", MySqlDbType.VarChar).Value = usernameInputField.Text;
adapter.SelectCommand = command;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
这是添加部分(只是添加它,但它与问题不太相关)
private void registerIconButton_Click(object sender, EventArgs e)
{
checkUser();
var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2");
connection.Open();
string insertQuery = "INSERT INTO `accounts` (username, password, email) VALUES ('" + usernameInputField.Text + "','" + passwordInputField.Text + "','" + emailInputField.Text + "')";
MySqlCommand command = new MySqlCommand(insertQuery, connection);
command.Parameters.Add("@username", MySqlDbType.VarChar).Value = usernameInputField.Text;
command.Parameters.Add("@password", MySqlDbType.VarChar).Value = passwordInputField.Text;
command.Parameters.Add("@email", MySqlDbType.VarChar).Value = emailInputField.Text;
if (checkUser())
{
MessageBox.Show("This username already exists!");
}
else
{
if (command.ExecuteNonQuery() == 1)
{
}
else
{
MessageBox.Show("ERROR");
}
}
connection.Close();
}
连接和命令是一次性的,因此您应该using
块将它们放入内部以确定性地清理资源。
如果您只想知道是否存在某些东西,您可以使用ExecuteScalar
而不是使用重量级适配器。
然后只需返回表达式的结果!= null
即可获得指示用户是否存在的 boolean。
using(var connection = new MySqlConnection("Server=127.0.0.1;Database=book_library;user=root;password=root2"))
using(var cmd = connection.CreateCommand())
{
connection.Open();
string checkUsernameQuery = "SELECT TOP 1 username FROM accounts WHERE username = @p1";
cmd.Parameters.Add(new MySqlParameter("@p1", MySqlDbType.VarChar).Value = usernameInputField.Text;
var user = cmd.ExecuteScalar();
return user != null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.