2014-09-22 80 views
-1
private void btnSave_Click(object sender, EventArgs e) 
    { 

     if (this.Text == "Add") 
     { 
      cmd.Connection = cn; 
      cmd.CommandText = string.Format(@"INSERT INTO LibraryInfo (First_Name,MI,Last_Name,Address,Municipality,Province,textbox7) VALUES('{0}','{1}','{2}','{3}','{4}',{5}','{6}')", 
      txtFName.Text.Trim(), 
      txtMI.Text.Trim(), 
      txtLName.Text.Trim(), 
      txtAddress.Text.Trim(), 
      cboMunicipality.Text.Trim(), 
      cboProvince.Text.Trim(), 
      textbox.Text.Trim()); 
     } 
     else 
     { 
      cmd.Connection = cn; 
      cmd.CommandText = string.Format(@"UPDATE LibraryInfo SET First_Name='{0}',MI='{1}',Last_Name='{2}',Address='{3}',Municipality='{4}',Province='{5}',textbox7='{6}' WHERE ID={7}", 
      txtFName.Text.Trim(), 
      txtMI.Text.Trim(), 
      txtLName.Text.Trim(), 
      txtAddress.Text.Trim(), 
      cboMunicipality.Text, 
      cboProvince.Text, 
      textbox.Text.Trim(), 
      txtID.Text); 
     } 

     cmd.ExecuteNonQuery(); 
     MessageBox.Show("Record Updated"); 
     this.Dispose(); 
     Form1 frm1 = new Form1(); 
     frm1.ShowDialog(); 
    } 

//它說:查詢表達式'Cavite','Graduate')'中的語法錯誤(缺少運算符)。 //甲米地是省和研究生是textbox7cmd.ExecuteNonQuery()缺少運算符

+13

嘆息;不要將用戶輸入輸入到SQL中。永遠。 – 2014-09-22 12:53:57

回答

4

您的SQL語句{5}之前缺少報價:

"INSERT INTO LibraryInfo (First_Name,MI,Last_Name,Address,Municipality,Province,textbox7) VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}')" 

最重要的,這就是讓你陷入困境的最好辦法。您應該使用參數,而不是自己創建SQL語句。

對於類似這樣每個參數使用的東西:

command.Parameters.AddWithValue("@firstname", txtFName.Text.Trim()); 

然後使用您的SQL @firstname

"INSERT INTO LibraryInfo (First_Name, ...) VALUES(@firstname, ...')" 

進一步閱讀:documentation

+0

@tokazaki:需要更多幫助? – 2014-09-22 14:53:55

1

你需要的是:parameters;例如:

cmd.Connection = cn; 
cmd.CommandText = @"UPDATE LibraryInfo SET [email protected],[email protected],[email protected],[email protected] ... WHERE [email protected]"; 
cmd.Parameters.AddWithValue("@mi", txtMI.Text.Trim()); 
cmd.Parameters.AddWithValue("@firstName", txtFName.Text.Trim()); 
... 
cmd.Parameters.AddWithValue("@id", txtID.Text); 

注意缺少周圍的參數'報價,而且缺乏string.Format

你現在擁有的基本上是一個邀請「請過來,把我的所有數據,然後摧毀我的數據庫,謝謝」。

4

決不不斷(我的意思是曾經)使用String.Format傳遞參數的查詢!改用參數化查詢。

你的情況可能是這樣的:

cmd.Connection = cn; 
cmd.CommandText = string.Format(@"INSERT INTO LibraryInfo First_Name,MI,Last_Name,Address,Municipality,Province,textbox7) VALUES(@firstName, @middleName @lastName, @address, ...)"); 

cmd.Parameters.AddWithValue("@firstName", txtFName.Text.Trim()); 
cmd.Parameters.AddWithValue("@middleName", txtMI.Text.Trim()); 
... 

爲什麼?

  1. 沒有SQL注入
  2. 無死角類型轉換(DateTimefloat等)
  3. 看馬!沒有缺失的單引號!
相關問題