Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd połączenia MySQL, którego nigdy nie widziałem

Dlaczego nadal używasz wadliwego ODBC do łączenia się z MySql, gdy istnieje złącze ADO.NET ? Co to jest ta okropna konkatenacja ciągów podczas tworzenia zapytania?:

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);

Czy nie słyszałeś o wstrzykiwaniu SQL i zapytania sparametryzowane które pozwalają tego uniknąć?

Mogę tylko powiedzieć, że jeśli użyjesz + znak podczas pisania zapytania SQL to jak branie pistoletu i strzelanie prosto w stopę (lub w głowę w zależności od scenariusza, ale we wszystkich przypadkach strzelasz do siebie, w zasadzie zachowanie samobójcze).

Oto właściwy sposób robienia rzeczy:

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();
    }
}

Proszę również odpowiednio nazwać te pola tekstowe. Biedak, który będzie utrzymywał ten kod, może wydawać okrzyki rozpaczy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySqlCommand Command.Parameters.Add jest przestarzały

  2. Co oznacza błąd mysql 1025 (HY000):Błąd zmiany nazwy './foo' (errorno:150)?

  3. Data i godzina TERAZ PHP mysql (+ wariant PDO)

  4. mysql recursive(drzewo) kategoria rodzic-dziecko

  5. Użyj szablonów Cloud Formation, aby uruchomić instancje MySQL na RDS