Waarom gebruik je nog steeds de ODBC met fouten om verbinding te maken met MySql als er een ADO.NET-connector ? En wat is deze vreselijke aaneenschakeling van tekenreeksen bij het vormen van uw zoekopdracht?:
OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES ('" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + TextBox8.Text + "')", connection);
Heb je nog nooit gehoord van SQL-injectie en geparametriseerde zoekopdrachten waarmee kan ik het vermijden?
Ik kan alleen maar zeggen dat als je de +
teken bij het schrijven van een SQL-query is het alsof je een pistool neemt en naar je voet schiet (of naar je hoofd, afhankelijk van het scenario, maar in alle gevallen schiet je op jezelf, in feite een suïcidaal gedrag).
Dus, hier is de juiste manier om dingen te doen:
using (var conn = new MySqlConnection("Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
{
conn.Open();
using (var tx = conn.BeginTransaction())
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES (@Email, @FirstName, @SecondName, @DOB, @Location, @Aboutme, @username, @password)";
cmd.Parameters.AddWithValue("@Email", TextBox1.Text);
cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
cmd.Parameters.AddWithValue("@SecondName", TextBox3.Text);
// TODO: might require a parsing if the column is of type date in SQL
cmd.Parameters.AddWithValue("@DOB", TextBox4.Text);
cmd.Parameters.AddWithValue("@Location", TextBox5.Text);
cmd.Parameters.AddWithValue("@Aboutme", TextBox6.Text);
cmd.Parameters.AddWithValue("@username", TextBox7.Text);
cmd.Parameters.AddWithValue("@password", TextBox8.Text);
cmd.ExecuteNonQuery();
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "select last_insert_id();";
int id = Convert.ToInt32(cmd.ExecuteScalar());
Label10.Text = Convert.ToString(id);
}
tx.Commit();
}
}
Geef die tekstvakken ook de juiste naam. De arme man die deze code gaat onderhouden, kan een wanhoopskreet uiten.