Mysql
 sql >> база данни >  >> RDS >> Mysql

Грешка при връзката с MySQL, която никога не съм виждал

Защо все още използвате бъгавия ODBC, за да се свържете с MySql, когато има ADO.NET конектор ? Също така каква е тази ужасна конкатенация на низове при формиране на вашата заявка?:

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

Не сте ли чували за SQL инжекция и параметризирани заявки които позволяват да се избегне?

Всичко, което мога да кажа, е, че ако използвате + подпишете, когато пишете SQL заявка, това е като да вземете пистолет и да стреляте право в крака си (или главата в зависимост от сценария, но във всички случаи стреляте по себе си, основно самоубийствено поведение).

И така, ето правилния начин да направите нещата:

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

Също така, моля, наименувайте тези текстови полета по подходящ начин. Горкият човек, който ще поддържа този код, може да издаде писъци на отчаяние.




  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 библиотеки в cmakelist.txt

  2. Връзка на таблицата за подтипове

  3. Mysql 1 произволен ред

  4. Повторете низ няколко пъти в MySQL – REPEAT()

  5. Django - OperationalError:(2006, „MySQL сървърът е изчезнал“)