Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan koneksi MySQL yang belum pernah saya lihat

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Kesalahan SQL:1140, SQLState:42000

  2. panggilan ke fungsi anggota execute() pada non-objek

  3. PostgreSQL setara dengan tabel memori MySQL?

  4. Kelompokkan Mysql dengan dua kolom dan pilih nilai maksimum kolom ketiga

  5. Kueri SQL Maksimum per halaman