具有访问表(CustomersTable)和两个字段(CustomerID,CustomerName):

command.CommandText = "UPDATE CustomersTable   SET CompanyName =  @p2   WHERE CompanyName =  @p1";
command.Parameters.Clear();
command.Parameters.Add("@p1", OleDbType.VarChar).Value = "xyz3";
command.Parameters.Add("@p2", OleDbType.VarChar).Value = "xyz4";
command.ExecuteNonQuery();


不会更改CompanyName字段。

最佳答案

OleDbCommand不支持命名参数。

来自OleDbCommand.Parameters property


  OLE DB .NET提供程序不支持用于传递的命名参数
  SQL语句或存储过程调用的参数的参数
  OleDbCommand设置为CommandType时的Text。在这种情况下,
  必须使用问号(?)占位符。例如:
  
  在客户ID =?的情况下从客户中选择*
  
  因此,将OleDbParameter对象添加到
  OleDbParameterCollection必须直接对应于
  命令文本中参数的问号占位符。


实际上,不一定必须使用?,但这是一个逗号。

还可以使用using statement处置数据库连接和对象。

using(OleDbConnection con = new OleDbConnection(conString))
using(OleDbCommand command = con.CreateCommand())
{
    command.CommandText = "UPDATE CustomersTable SET CompanyName = ? WHERE CompanyName = ?";
    command.Parameters.Add("@p1", OleDbType.VarChar).Value = "xyz3";
    command.Parameters.Add("@p2", OleDbType.VarChar).Value = "xyz4";
    con.Open();
    command.ExecuteNonQuery();
}

10-04 14:28