cmd.ExecuteNonQuery() 缺少运算符

本文关键字:运算符 ExecuteNonQuery cmd | 更新日期: 2023-09-27 18:23:50

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

/它说:查询表达式"甲米地","毕业生"(中的语法错误(缺少运算符("。甲米地是省,毕业生是文本框7

cmd.ExecuteNonQuery() 缺少运算符

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, ...')"

延伸阅读:文档。

从来没有(我的意思是永远(使用 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. 看妈!没有缺少单引号!

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

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

你现在基本上是一个邀请"请来拿走我的所有数据,然后销毁我的数据库,谢谢"。