【问题标题】:ORA-00932: inconsistent datatypes: expected NUMBER got DATEORA-00932: 不一致的数据类型: 预期 NUMBER 得到 DATE
【发布时间】:2016-07-20 13:38:57
【问题描述】:

我不知道为什么会收到此异常。参数顺序相同。数据类型没有问题。我也试过这个: TO_DATE(:UPDATE_DATE, 'MM/DD/YYYY HH24:MI:SS') 没有任何改变。我的插入命令使用日期字段成功运行此更新命令有什么问题?当我删除日期字段时,我能够成功更新,所以我确信 UPDATE_DATE 列存在问题。有什么建议么?

var commandTxt = @"UPDATE CFG_PERMISSION 
                                SET CATEGORY= :CATEGORY,                                    
                                    TYPE_CODE = :TYPE_CODE, 
                                    LOCATION_ID = :LOCATION_ID, 
                                    OBJECT_ID = :OBJECT_ID, 
                                    NAME = :NAME, 
                                    DESCRIPTION = :DESCRIPTION,  
                                    UPDATE_DATE = :UPDATE_DATE,     
                                    UPDATED_BY = :UPDATED_BY                                        
                                WHERE ID = :SCOPE_ID";


            OracleParameter[] parameters = new OracleParameter[] {
                new OracleParameter(":SCOPE_ID", OracleDbType.Long,10, cfgRoleScope.ID, ParameterDirection.Input),
                new OracleParameter(":CATEGORY",OracleDbType.Varchar2,30, cfgRoleScope.CATEGORY, ParameterDirection.Input),
                new OracleParameter(":TYPE_CODE", OracleDbType.Varchar2,30, cfgRoleScope.TYPE_CODE,ParameterDirection.Input),
                new OracleParameter(":LOCATION_ID",OracleDbType.Long,10, DBNull.Value, ParameterDirection.Input),
                new OracleParameter(":OBJECT_ID", OracleDbType.Long,10, DBNull.Value, ParameterDirection.Input),
                new OracleParameter(":NAME", OracleDbType.Varchar2,50, cfgRoleScope.NAME,ParameterDirection.Input),
                new OracleParameter(":DESCRIPTION", OracleDbType.Varchar2,50, cfgRoleScope.DESCRIPTION,ParameterDirection.Input),
                new OracleParameter(":UPDATE_DATE",OracleDbType.Date,DateTime.Now,ParameterDirection.Input),
                new OracleParameter(":UPDATED_BY",OracleDbType.Long,6,cfgRoleScope.UPDATED_BY, ParameterDirection.Input),                    

            };

            if (cfgRoleScope.OBJECT_ID > 0)
                parameters[4].Value = cfgRoleScope.OBJECT_ID;

            if (cfgRoleScope.LOCATION != null)
                parameters[3].Value = cfgRoleScope.LOCATION.ID;

            var command = db.CreateCommand();
            command.Parameters.AddRange(parameters.ToArray());
            command.CommandText = commandTxt;
            command.ExecuteNonQuery();

【问题讨论】:

  • 您实际上不需要日期参数,而是使用 sysdate 因为您需要当前日期时间。另请参阅 DateTime.Now 的格式并检查您在 DB 中接受的格式
  • @Prathyush 我知道我可以使用 SYSDATE 但我想知道为什么我不能传递那个日期参数。最后发现scope_id应该是最后一个参数。这就是它给出这个错误的原因。

标签: oracle c#-4.0 oracle11g


【解决方案1】:

在末尾添加 scope_id 参数解决了我的问题。最终参数应该是这样的。

OracleParameter[] parameters = new OracleParameter[] {                    
                new OracleParameter(":CATEGORY",OracleDbType.Varchar2,30, cfgRoleScope.CATEGORY, ParameterDirection.Input),
                new OracleParameter(":TYPE_CODE", OracleDbType.Varchar2,30, cfgRoleScope.TYPE_CODE,ParameterDirection.Input),
                new OracleParameter(":LOCATION_ID",OracleDbType.Long,10, DBNull.Value, ParameterDirection.Input),
                new OracleParameter(":OBJECT_ID", OracleDbType.Long,10, DBNull.Value, ParameterDirection.Input),
                new OracleParameter(":NAME", OracleDbType.Varchar2,50, cfgRoleScope.NAME,ParameterDirection.Input),
                new OracleParameter(":DESCRIPTION", OracleDbType.Varchar2,50, cfgRoleScope.DESCRIPTION,ParameterDirection.Input),
                new OracleParameter(":UPDATE_DATE",OracleDbType.Date,cfgRoleScope.UPDATE_DATE,ParameterDirection.Input),
                new OracleParameter(":UPDATED_BY",OracleDbType.Long,6,cfgRoleScope.UPDATED_BY, ParameterDirection.Input),                    
                new OracleParameter(":SCOPE_ID", OracleDbType.Long,10, cfgRoleScope.ID, ParameterDirection.Input),

            };

【讨论】:

    猜你喜欢
    • 2017-12-28
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2017-04-21
    • 2019-07-24
    • 2011-06-03
    相关资源
    最近更新 更多