C# OLEDB命令,更新

C# OLEDB命令,更新,c#,oledb,C#,Oledb,具有一个访问表(CustomerTable)和两个字段(CustomerID、CustomerName): 不更改CompanyName字段 OleDbCommand不支持命名参数 从 OLE DB.NET提供程序不支持用于传递的命名参数 由调用的SQL语句或存储过程的参数 OleDbCommand当CommandType设置为Text时。在这种情况下 必须使用问号(?)占位符。例如: 从CustomerID=?的客户中选择* 因此,OleDbParameter对象添加到 OleDbParame

具有一个访问表(CustomerTable)和两个字段(CustomerID、CustomerName):


不更改CompanyName字段

OleDbCommand
不支持命名参数

OLE DB.NET提供程序不支持用于传递的命名参数 由调用的SQL语句或存储过程的参数
OleDbCommand
CommandType
设置为
Text
时。在这种情况下 必须使用问号(?)占位符。例如:

从CustomerID=?的客户中选择*

因此,
OleDbParameter
对象添加到
OleDbParameterCollection
必须直接对应于 命令文本中参数的问号占位符

实际上,使用
不是必须的,但它是一个命令

还可用于处置数据库连接和对象

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();
}

Ole Db参数是位置参数,未命名。至少当JET按该顺序引用
@p2
@p1
时,将引用您添加的第一个参数,然后是第二个参数。IIRC JET有一些准命名参数支持,其中引用
@p2
@p1
@p2
将引用第一个、第二个和第一个参数(因此,尽管它们是位置参数,但有点像每个参数名称的第一个实例用于确定位置)。TL;DR不要使用JET或ACE。
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();
}