C#MySQL将相同的数据插入2个不同的表

时间:2019-03-17 11:31:11

标签: c# mysql sql database

所以我尝试编写代码以在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。如何将相同的数据添加到不同的表中?

2 个答案:

答案 0 :(得分:0)

如果您不想读取数据,请不要使用数据读取器。只需在命令上使用ExecuteNonQuery

datainfo.ExecuteNonQuery();

别忘了打开并关闭您的连接!

答案 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-但这答案范围太广了,因此我将留给您阅读和应用。