在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 = "";
}
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')