C# Oracle数据库,SQL Update语句将不工作(OLEDB)
我设置了一个数字主键,以及一个存储卡车散热片的字母数字字段,这只是数字和字母的随机组合。我不生成散热片,这些散热片将始终与卡车车队识别号相同 以下是代码视图:C# Oracle数据库,SQL Update语句将不工作(OLEDB),c#,database,oracle,oledb,C#,Database,Oracle,Oledb,我设置了一个数字主键,以及一个存储卡车散热片的字母数字字段,这只是数字和字母的随机组合。我不生成散热片,这些散热片将始终与卡车车队识别号相同 以下是代码视图: storeTruckSplit = truckSplit[1];//Stores truck FIN //Update truck value try { conn.Open(); OleDbCommand command;
storeTruckSplit = truckSplit[1];//Stores truck FIN
//Update truck value
try
{
conn.Open();
OleDbCommand command;
command = new OleDbCommand(
"Update Trucks" +
" SET Trucks.TruckInUse = ? WHERE TFIN = " + storeTruckSplit.ToString(), conn);
command.Parameters.Add(new OleDbParameter("@use", "T"));
command.ExecuteNonQuery();//Commit
conn.Close();
}
catch (OleDbException exception)
{
MessageBox.Show(exception.Message, "OleDb Exception");
}
以下是表格视图:
CREATE TABLE Trucks
(
TruckID number(9) CONSTRAINT TRUCK_PK PRIMARY KEY,
TFIN char(9) NOT NULL,
TruckCategory varchar(80) NOT NULL,
TruckCodeName varchar(50) NOT NULL,
MaxWeight number(10) NOT NULL,
TruckSize number(10) NOT NULL,
TruckInUse varchar(1) NULL
);
对于TRUCKID
,在此表上插入之前还有一个序列和触发器
我得到的是ORA-00904
,注意这里显示的是c697734d
,它是更新的where子句中使用的卡车fin
确切信息:
“处理命令期间发生一个或多个错误。
ORA-00904:“C6977734D”:无效的契约
将
TFIN
值也设为参数:
command = new OleDbCommand(
"Update Trucks" +
" SET Trucks.TruckInUse = ? WHERE TFIN = ?", conn);
command.Parameters.Add(new OleDbParameter("@use", "T"));
command.Parameters.Add(new OleDbParameter("@tfin", storeTruckSplit));
command.ExecuteNonQuery();//Commit
目前,您没有在筛选的值周围加引号,因此查询将其视为标识符(字段、变量等),而不是常量值。因为您已经为“正在使用”值使用了参数(因为您提供的是常量值,所以不必加引号)最好的解决方法是为过滤器使用参数。它将与引号一起使用,除非字符串值中有引号。使用参数可以消除这种风险(以及其他风险)。