Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oracle数据库,SQL Update语句将不工作(OLEDB)_C#_Database_Oracle_Oledb - Fatal编程技术网

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   
目前,您没有在筛选的值周围加引号,因此查询将其视为标识符(字段、变量等),而不是常量值。因为您已经为“正在使用”值使用了参数(因为您提供的是常量值,所以不必加引号)最好的解决方法是为过滤器使用参数。

它将与引号一起使用,除非字符串值中有引号。使用参数可以消除这种风险(以及其他风险)。