gpt4 book ai didi

c# - 如何在不更改现有数据的情况下更新数据 c# ms access

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:46 24 4
gpt4 key购买 nike

大家好,当我想更新而不更改旧数据时出现此错误

Syntax error (missing operator) in query expression 'data.[Phone Number]+ ' ' +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();

最佳答案

开始使用命令参数,您将避免这样的问题:

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 注入(inject)。请注意,您应该为您的控件(文本框)提供正确的命名,这个名称对其他程序员没有任何意义。将您的专栏写在一起 PhoneNumber 一直逃避它们很烦人,您无缘无故地为自己创造了更多工作。

其他要点将 OleDbConnection 和 OleDbDataAdapter 包装在 using block 中

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
}

}

using 表示 try/catch/finally 和在 finally block 中调用 Dispose()。如果您的代码有异常,这将保护您的连接将被关闭。在您当前的格式中,这不会发生。 OleDbDataAdapter 正在使用非托管资源,因此它也应该是 Dispose()

关于c# - 如何在不更改现有数据的情况下更新数据 c# ms access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com