大家好,如果我想更新而不更改旧数据,我会收到此错误
查询表达式'数据中的语法错误(缺少运算符)。[电话号码] +' ' +0770444 +'。
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\db\\it.accdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "UPDATE data SET data.[Phone Number] = data.[Phone Number]+ ' ' +"+textBox23.Text+" + WHERE data.([ID]) = " + textBox15.Text + " ";
cmd.Connection = con;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt;
dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
MessageBox.Show("Data Updated Successfully");
con.Close();
答案 0 :(得分:0)
你的命令似乎应该是错的
cmd.CommandText = "UPDATE data SET data.[Phone Number] = " + "'" + data.[Phone Number] + textBox23.Text + "' WHERE data.([ID]) = " + textBox15.Text;
尽管我们始终建议使用参数化查询而不是字符串连接。
答案 1 :(得分:0)
开始使用命令参数,您将避免这样的问题:
cmd.CommandText = @"UPDATE data SET [Phone Number] = [Phone Number] + ' ' + @NewPhoneNumber WHERE ID = @ID ";
cmd.Parameters.AddWithValue("@ID", textBox15.Text);
cmd.Parameters.AddWithValue("@NewPhoneNumber", textBox23.Text);
cmd.Connection = con;
此外,这将保护您免受Sql注入。请注意,您应该为控件(文本框)提供正确的命名,这个名称对其他程序员来说没什么意义。把你的专栏写在一起PhoneNumber
一直逃避它们很烦人,你无缘无故为自己创造了更多的工作。
其他点将OleDbConnection和OleDbDataAdapter包装在使用块
中using(OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\db\\it.accdb"))
{
con.Open();
//... stuff
DataTable dt;
using(OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
//stuff relate to db adapter
}
}
使用表示try / catch / finally,在finally块中调用Dispose()
。如果您的代码有异常,您的连接将被关闭,这将保护您的安全。在您当前的格式中,这不会发生。 OleDbDataAdapter
正在使用非托管资源,因此它也应该是Dispose()
。
答案 2 :(得分:0)
谢谢你们,我通过这个解决了它
OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText =“UPDATE data SET [电话号码] = [电话号码] + \ n'”+ textBox3.Text +“'WHERE ID =”+ textBox15.Text +“”; cmd.Connection = con; cmd.ExecuteNonQuery(); con.Close();
MessageBox.Show("New Number Inserted Successfully to ID " + textBox15.Text);
con.Open();