所以我尝试编写代码以在2个不同的表中添加2个相同的数据,这是 “ studentinfo”和“ logindb” 我尝试这样做
enter code heprivate void buttonRegisterStudent_Click(object sender, EventArgs e)
{
String connection = "server=localhost;user id=root;password=root;persistsecurityinfo=True;database=votingdb";
//Inserting Data
String insertDataInfo = @"INSERT INTO studentinfo (firstname,lastname,username,password,email) values
('"+this.textBoxFirstName.Text+"','"+this.textBoxLastName.Text+"','"+this.textBoxUsername.Text+
"','"+ this.textBoxPassword.Text + "','"+ this.textBoxEmail.Text + "')";
String insertDataLogin = @"INSERT INTO logindb (username,password) values ('"+this.textBoxUsername.Text+"','"
+this.textBoxPassword.Text+"')";
//Connection
MySqlConnection con = new MySqlConnection(connection);
MySqlCommand datainfo = new MySqlCommand(insertDataInfo,con);
MySqlCommand datalogin = new MySqlCommand(insertDataLogin, con);
MySqlDataReader datareaderinfo;
MySqlDataReader datareaderlogin;
try
{
con.Open();
datareaderinfo = datainfo.ExecuteReader();
datareaderlogin = datalogin.ExecuteReader();
MessageBox.Show("Student Register Successfully!");
}
catch (Exception ex)
{
MessageBox.Show("Failed to Register" + ex);
}
}
导致错误,该错误表示代码中可能只有一个mysqldatareader。如何将相同的数据添加到不同的表中?
答案 0 :(得分:0)
答案 1 :(得分:0)
插入语句不需要数据读取器,只需使用ExecuteNonQuery
。
请注意,您当前的查询容易受到SQL Injection攻击,因此存在安全隐患。
代替将用户输入作为字符串连接来创建SQL语句,请使用参数化查询。
有关更多信息,请阅读How can prepared statements protect from SQL injection attacks?
代码中主要部分的改进版本是:
var insertDataInfo = @"INSERT INTO studentinfo (firstname,lastname,username,password,email) values
(@firstName, @lastName, @userName, @passwordHash, @email)";
var insertDataLogin = @"INSERT INTO logindb (username,password) values (@userName, @passwordHash)";
var datainfo = new MySqlCommand(insertDataInfo,con);
datainfo.Parameters.Add("@firstName", DbType.VarChar).Value = this.textBoxFirstName.Text;
datainfo.Parameters.Add("@lastName", DbType.VarChar).Value = this.textBoxLastName.Text;
datainfo.Parameters.Add("@userName", DbType.VarChar).Value = this.textBoxUsername.Text;
datainfo.Parameters.Add("@passwordHash", DbType.VarChar).Value = this.textBoxPassword.Text;
datainfo.Parameters.Add("@email", DbType.VarChar).Value = this.textBoxEmail.Text;
var datalogin = new MySqlCommand(insertDataLogin, con);
datalogin.Parameters.Add("@userName", DbType.VarChar).Value = this.textBoxUsername.Text;
datalogin.Parameters.Add("@passwordHash", DbType.VarChar).Value = this.textBoxPassword.Text;
datainfo.ExecuteNonQuery();
datalogin.ExecuteNonQuery();
此外,您还将密码以纯文本格式存储在数据库中。
那是一个很大的安全漏洞。 You should be storing salted hash values of your passwords instead-但这答案范围太广了,因此我将留给您阅读和应用。