2014-09-22 45 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. 看马!没有缺失的单引号!
相关问题