2014-10-05 3 views
0

Ошибка:Синтаксическая ошибка во время вставки данных с использованием MySQL

Incorrect Syntax near 's'. unclosed quotation mark after the charater string ');'.

Код:

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    SqlConnection cn = new SqlConnection(global::CIMT.Properties.Settings.Default.Database2ConnectionString); 

    try 
    { 
     string sql = "INSERT INTO Students(Student_Id,First_Name,Last_Name,Fathers_Name,DOB,Mobile,Address,Post_Code) VALUES('"+this.txtId.Text+"','"+this.txtFName.Text+"','"+this.txtLName.Text+"','"+this.txtFaName.Text+"','"+this.txtDOB.Text+"','"+this.txtMob.Text+"','"+this.txtAddress.Text+"','"+this.txtPostCode.Text+ "');"; 
     SqlCommand exesql = new SqlCommand(sql, cn); 
     cn.Open(); 
     exesql.ExecuteNonQuery(); 

     MessageBox.Show("Add new record done !!" , "Message" , MessageBoxButtons.OK , MessageBoxIcon.Information); 
     this.studentsTableAdapter.Fill(this.database2DataSet.Students); 
    } 

    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 

    finally 
    { 
     cn.Close(); 
    } 
} 
+4

Этот подход уязвим к SQL-инъекции. Пожалуйста, для всех нас, параметризуйте свои запросы. Это почти наверняка устранит эту синтаксическую ошибку. –

+3

Вы получаете входные данные как «мир привет», то это не ускользает, и вы получаете ошибку, так как предложено выше (SQL-инъекция), лучше пойти с параметризованными запросами. –

+1

[Дайте мне параметризованный SQL или дайте мне смерть] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/) –

ответ

1

Использование параметризованных запросов, как ребята сказали вам в комментариях, не только он будет избежать ошибок, но это будет также поможет вам избежать SQL-инъекций.

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    var cnString = global::CIMT.Properties.Settings.Default.Database2ConnectionString; 
    using (SqlConnection cn = new SqlConnection(cnString)) 
    { 
     try 
     { 
      cn.Open(); 
      using (var exesql = new SqlCommand(
         @"INSERT INTO Students(Student_Id 
              ,First_Name 
              ,Last_Name 
              ,Fathers_Name 
              ,DOB 
              ,Mobile 
              ,Address 
              ,Post_Code) 
         VALUES(@Student_Id 
           ,@First_Name 
           ,@Last_Name 
           ,@Fathers_Name 
           ,@DOB 
           ,@Mobile 
           ,@Address 
           ,@Post_Code);", 
      cn)) 
      { 
       exesql.Parameters.AddWithValue("@Student_Id", this.txtId.Text); 
       exesql.Parameters.AddWithValue("@First_Name", this.txtFName.Text); 
       exesql.Parameters.AddWithValue("@Last_Name",this.txtLName.Text); 
       exesql.Parameters.AddWithValue("@Fathers_Name", this.txtFaName.Text); 
       exesql.Parameters.AddWithValue("@DOB", this.txtDOB.Text); 
       exesql.Parameters.AddWithValue("@Mobile", this.txtMob.Text); 
       exesql.Parameters.AddWithValue("@Address", this.txtAddress.Text); 
       exesql.Parameters.AddWithValue("@Post_Code", this.txtPostCode.Text); 

       exesql.ExecuteNonQuery(); 

       MessageBox.Show("Add new record done !!" , "Message" , MessageBoxButtons.OK 
           , MessageBoxIcon.Information); 
       this.studentsTableAdapter.Fill(this.database2DataSet.Students); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
} 

читать на SqlParameter Class