插入时不会将数据复制到表中

时间:2015-03-01 16:31:52

标签: c# mysql

我用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();
        }
    }

2 个答案:

答案 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");
            }

        }