我正在创建一个WinForm注册表单,并且最近切换了我的整个代码以删除我得到的SQL注入。现在,我可以注册要存储在我的数据库中的用户,但是不能使用该信息登录。

string constring = "datasource=127.0.0.1;port=3306;username=root;password=welcome";
string Query = "insert into userdatabase.users (userid, email, passone, passtwo, lastname, firstname) values(@userid,@email,@passone,@passtwo,@lastname,@firstname)";
MySqlConnection conDatabase = new MySqlConnection(constring);
MySqlCommand cmd = new MySqlCommand(Query, conDatabase);
cmd.Parameters.AddWithValue("userid", this.userid_txt.Text);
cmd.Parameters.AddWithValue("passone", this.passone_txt.Text);

try
{
    conDatabase.Open();
    cmd.ExecuteNonQuery();
    MessageBox.Show("Welcome to iDSTEM!");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}


那是我的登录按钮的代码,我知道AddWithValue不需要在那里,但是那是我当前必须存储的值,并且想知道我应该将其更改为什么。

这是将我的数据存储到MySql中的代码。

string constring = "datasource=127.0.0.1;port=3306;username=root;password=welcome";
string Query = "insert into userdatabase.users (userid, email, passone, passtwo, lastname, firstname) values(@userid,@email,@passone,@passtwo,@lastname,@firstname)";

MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmd = new MySqlCommand(Query, conDataBase);
cmd.Parameters.AddWithValue("userid", this.userid_txt.Text);
cmd.Parameters.AddWithValue("email", this.email_txt.Text);
cmd.Parameters.AddWithValue("passone", this.passone_txt.Text);
cmd.Parameters.AddWithValue("passtwo", this.passtwo_txt.Text);
cmd.Parameters.AddWithValue("lastname", this.lastname_txt.Text);
cmd.Parameters.AddWithValue("firstname", this.firstname_txt.Text);

try {
    conDataBase.Open();
    cmd.ExecuteNonQuery();
    MessageBox.Show("Welcome to iDSTEM!");
}
    catch (Exception ex)
{
        MessageBox.Show(ex.Message);
    }


当我运行登录时,我收到


  命令执行期间遇到致命错误


在此先感谢您提供的任何帮助或提示。

最佳答案

要登录,您将必须使用SELECT * FROM tbl where username = @userid and password = @password而不是您使用的insert语句。 (我假设您提供的第一个代码用于登录)。然后,可以使用ExecuteNonQueryExecuteReader代替DataAdapter来填充DataSet

您收到致命错误,因为您在编写用于登录的插入查询(6-> @userid,@email,@passone,@passtwo,@lastname,@firstname)和提供的参数(2-> @userid,@passone)中期望的参数数量不同。

关于c# - 由于出现致命错误,WinForm不接受来自MySql的用户输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23399996/

10-10 13:01