【发布时间】:2020-09-27 23:58:43
【问题描述】:
基本上我想使用 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();
}
【问题讨论】:
-
您需要再次检查命令参数的实际使用情况。在
SELECT和INSERT查询中。 -
"SELECT * FROM accounts WHERE username = 'usernameInputField.Text'"C# 不是 php,变量名不会在字符串中扩展。顺便说一句,整个检查是不必要的。只需在用户名字段上创建一个唯一索引并在执行插入后检查约束违规错误消息。 -
这也是一种非常奇怪的编写 SQL 的方式——你粘在控件名称中并添加参数。只需使用参数。将密码存储为纯文本也会让你在现实世界中被解雇