Mengapa Anda masih menggunakan ODBC kereta untuk terhubung ke MySql ketika ada konektor ADO.NET ? Juga apa rangkaian string yang mengerikan ini saat membentuk kueri Anda?:
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);
Pernahkah Anda mendengar tentang injeksi SQL dan kueri berparameter yang memungkinkan untuk menghindarinya?
Yang bisa saya katakan adalah jika Anda menggunakan +
tanda tangani saat menulis kueri SQL, ini seperti mengambil pistol dan menembak tepat di kaki Anda (atau kepala tergantung pada skenario, tetapi dalam semua kasus Anda menembak diri sendiri, pada dasarnya merupakan perilaku bunuh diri).
Jadi, inilah cara yang tepat untuk melakukan sesuatu:
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();
}
}
Juga beri nama kotak teks itu dengan tepat. Orang malang yang akan mempertahankan kode ini mungkin akan mengeluarkan jeritan putus asa.