Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi kết nối MySQL mà tôi chưa từng thấy

Tại sao bạn vẫn sử dụng ODBC lỗi để kết nối với MySql khi có trình kết nối ADO.NET ? Ngoài ra, nối chuỗi khủng khiếp này là gì khi tạo truy vấn của bạn ?:

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

Bạn chưa nghe nói về Chèn SQL truy vấn được tham số hóa cái nào cho phép tránh nó?

Tất cả những gì tôi có thể nói là nếu bạn sử dụng + ký khi viết một câu truy vấn SQL, nó giống như cầm súng và bắn ngay vào chân bạn (hoặc vào đầu tùy theo tình huống, nhưng trong mọi trường hợp, bạn đang tự bắn vào mình, về cơ bản là một hành vi tự sát).

Vì vậy, đây là cách thích hợp để thực hiện mọi việc:

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

Cũng vui lòng đặt tên cho các hộp văn bản đó một cách thích hợp. Anh chàng tội nghiệp sẽ duy trì mã này có thể phát ra tiếng la hét tuyệt vọng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có khả năng ANY_VALUE cho mysql 5.6 không?

  2. php mysql fulltext search:lucene, sphinx, or?

  3. CodeIgniter- bản ghi hoạt động chèn nếu mới hoặc cập nhật trùng lặp

  4. Thứ tự MySQL theo chuỗi với số

  5. Sự cố với GROUP_CONCAT và Longtext trong MySQL