在c#中使用多个文本框更新Access数据库时会出现异常

本文关键字:数据库 Access 异常 更新 文本 | 更新日期: 2023-09-27 18:19:04

我的代码抛出了这个异常:

UPDATE语句语法错误

我的SQL语法有什么问题?我怎么修理它?

我正在使用Visual Studio 2010和Access数据库。下面是我的代码:

private void CBM_editButton_Click(object sender, EventArgs e)
{
    try
    {
        // to edit or update already existing informations
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString =
          @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:'Users'Sunquick'Desktop'c sharp project2'ContactBook2.mdb";
        OleDbCommand com = new OleDbCommand();
        com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text +
          "','" + CBM_textbox2.Text + "','" + CBM_textbox3.Text +
          "','" + CBM_textbox4.Text + "','" + CBM_textbox5.Text + "'";
        com.Connection = con;
        con.Open();
        com.ExecuteNonQuery();
        MessageBox.Show("Data has been changed");
        con.Close();
    }
    catch(Exception Error)
    {
        MessageBox.Show(Error.ToString());
    }
    CBM_textbox1.Text = "";
}

在c#中使用多个文本框更新Access数据库时会出现异常

com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text + 
   "', Email='" + CBM_textbox2.Text + "', Mobile='" + CBM_textbox3.Text + 
   "', Country='" + CBM_textbox4.Text + "', City='" + CBM_textbox5.Text + "')"

倒数第二个字符是')' -这是从哪里来的

(另外,您没有where子句,因此您要更新整个表)

如果你的一个文本框包含一个单引号的文本,这将创建一个无效的sql语句。

正如其他人指出的那样,您可以使用参数化查询。不过,我将向您展示字符串版本。

它使用这个辅助函数

private string SqlStr(string s) 
{
    if (String.IsNullOrEmpty(s)) {
        return "NULL";
    }
    return "'" + s.Replace("'", "''") + "'";
}

试试这个:

string sql = String.Format(
    "UPDATE ContactList SET Name={0}, Email={1}, Mobile={2}, Country={3}, City={4}",
    SqlStr(CBM_textbox1.Text),
    SqlStr(CBM_textbox2.Text),
    SqlStr(CBM_textbox3.Text),
    SqlStr(CBM_textbox4.Text),
    SqlStr(CBM_textbox5.Text)
);  

您的sql示例在末尾有一个多余的")",并且由于缺少WHERE语句,它将更新整个表!您应该添加如下内容:

"... WHERE id=77"

或者您正在尝试添加记录?在这种情况下,您应该使用如下命令:

INSERT INTO ContactList (Name, Email, City) VALUES ('John','jd@xx.com','LA')