如何更新数据而不更改现有数据c#ms访问

时间:2016-10-26 06:34:56

标签: c# c#-4.0

大家好,如果我想更新而不更改旧数据,我会收到此错误

  

查询表达式'数据中的语法错误(缺少运算符)。[电话号码] +' ' +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();

3 个答案:

答案 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();