【发布时间】:2014-12-12 23:05:38
【问题描述】:
带有一个 Access 表 (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 字段。
【问题讨论】:
-
Ole Db 参数是位置未命名的。至少 JET 引用
@p2和@p1的顺序将引用您添加的第一个参数,然后是第二个参数。 IIRC JET 有一些准命名参数支持,其中引用@p2、@p1、@p2将引用第一个、第二个和第一个参数(所以虽然它们是位置的,但它有点像每个参数的第一个实例参数名称用于确定位置)。 TL;DR 不要使用 JET 或 ACE。