我用C#编写了一个寄存器算法。有两个文本框(用户,密码)和一个按钮(注册)。在注册按钮事件中,有一种方法可以将textbox.texts插入到用户表中的数据库中。 如何才能不在表中插入相同的用户? 例如:抛出错误消息"用户名已经被采用"
谢谢! 这就是我所说的方法:
public void InsertUser(string UserID,string UserPas)
{
string query = "INSERT INTO TabelaUtilizatori (name, password)VALUES('"+UserID+"', '"+UserPas+"')";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
答案 0 :(得分:0)
这不是最优雅的,但如果它对您来说没问题,那么首先运行这样的简单SELECT
查询没有错:
SELECT * FROM TabelaUtilizatori WHERE name='" + UserID + "'";
如果SELECT
没有结果,则用户名是免费的。如果结果包含行,则用户名已存在。
或者,如果用户名是TableaUtilizatori表的主键,则尝试再次插入相同的用户名将导致错误,您可以捕获并报告。
另一方认为:将密码存储为纯文本通常是一个坏主意。至少你应该存储密码的哈希值。更好的解决方案是散列并加盐。这样,如果数据库遭到破坏,用户名和密码就不会以纯文本形式存在。
答案 1 :(得分:0)
string insertString = "INSERT INTO TabelaUtilizatori (name, password) VALUES('"+UserID+"', '"+UserPas+"')";
string selectString = "SELECT COUNT(*) FROM TabelaUtilizatori where name=" + "'" + UserID + "'";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(selectString, connection);
int Result = 0;
Result = Convert.ToInt32(cmd.ExecuteScalar());
if (Result == 1)
{
MessageBox.Show("Username Already Exists");
this.CloseConnection();
}
else{
MySqlCommand cmdInsert = new MySqlCommand(insertString, connection);
cmdInsert.ExecuteNonQuery();
this.CloseConnection();
MessageBox.Show("Inregistration Sucessful");
}
}