cmd.ExecuteNonQuery()缺少运算符

时间:2014-09-22 12:52:06

标签: c#

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')'。 // Cavite是省,毕业生是textbox7

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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. 看马!没有遗漏的单引号!

答案 2 :(得分:1)

您需要的是:参数;例如:

cmd.Connection = cn;
cmd.CommandText = @"UPDATE LibraryInfo SET First_Name=@firstName,MI=@mi,Last_Name=@lastName,Address=@address ... WHERE ID=@id";
cmd.Parameters.AddWithValue("@mi", txtMI.Text.Trim());
cmd.Parameters.AddWithValue("@firstName", txtFName.Text.Trim());
...
cmd.Parameters.AddWithValue("@id", txtID.Text);

请注意参数周围缺少'引号,缺少string.Format

你现在拥有的基本上是一个邀请“请来取我的所有数据,然后破坏我的数据库,谢谢”。