【ODP.NET 日期】 在使用Oracle ODP.NET执行Update时提示ORA-00932 和 ORA-01843

【问题】

底层数据库链接由Oracle.Client修改为ODP.NEt连接数据库,以提高执行效率。

执行语句时发现以下问题

cmd.CommandText = "update SYS_USER  set  LASTLOGIN=:LASTLOGIN, MOBILEPHONE=‘13000000000‘  where USERID=:USERID11";

首先提示 ORA-01843 无效月份,发现ODP.NET 使用OracleDbtype.Date时,Dbparameter.value需要为System.DateTime类型

继续执行提示ORA-00932 “ORA-00932:
数据类型不一致:
应为 NUMBER,
但却获得 DATE”

检查数据类型完全一致啊

【分析】

重新写代码调试如下

OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "update SYS_USER  set  LASTLOGIN=:LASTLOGIN, MOBILEPHONE='13000000000'  where USERID=:USERID11";
 OracleParameter p1 = new OracleParameter("LASTLOGIN", OracleDbType.Date);
p1.Value = Convert.ToDateTime(DateTime.Now.ToString()) ;
 cmd.Parameters.Add(p1);

 OracleParameter p2 = new OracleParameter("USERID11", OracleDbType.Int32);
p2.Value = int.Parse("1");
            cmd.Parameters.Add(p2);

           int i = cmd.ExecuteNonQuery();

执行成功

OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "update SYS_USER  set  LASTLOGIN=:LASTLOGIN, MOBILEPHONE='13000000000'  where USERID=:USERID11";
OracleParameter p2 = new OracleParameter("USERID11", OracleDbType.Int32);
p2.Value = int.Parse("1");
            cmd.Parameters.Add(p2);

           int i = cmd.ExecuteNonQuery();

 OracleParameter p1 = new OracleParameter("LASTLOGIN", OracleDbType.Date);
p1.Value = Convert.ToDateTime(DateTime.Now.ToString()) ;
 cmd.Parameters.Add(p1);

执行失败,报错:ORA-00932:
数据类型不一致:
应为 NUMBER,
但却获得 DATE”

【结论】

通过搜索,发现ODP.NET的OracleCommand默认有一个属性BindByName是false,与Oracle.Client默认是不一样的。

需要默认启用 OracleCommand的BindByName

时间: 2024-12-28 10:35:58

【ODP.NET 日期】 在使用Oracle ODP.NET执行Update时提示ORA-00932 和 ORA-01843的相关文章

查询oracle sql的执行计划时,一个很重要的视图--dba_hist_sql_plan

本文的编写得到枯荣长老的大力帮助,在此表示感谢. 本文适用的oracle db版本为oracle 10g或者更高版本. 之所以说这个视图很重要,是因为该视图中有一列是在awrsqrpt报告中没有的.这一列就是 filter_predicates列. SELECT plan_hash_value, TO_CHAR(RAWTOHEX(child_address)), TO_NUMBER(child_number), id, LPAD(' ', DEPTH) || operation operatio

oracle执行update时卡死问题的解决办法

今天进行项目开发时,为了测试项目中SQL执行效果,就用PLSQL Developer执行了一下,没有commit就继续敲代码了,之后重新使用PLSQL Developer时,可能是网络原因,PLSQL Developer断开了与数据库连接并且卡死,便强制结束了.代码敲完后进行测试,项目执行后没效果,并且无响应,debug后发现jdbc执行SQL时没反应了,问了一下谷老师才找到原因. 由于在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 可以通过以

oracle Plsql 执行update或者delete时卡死问题解决办法

oracle Plsql 执行update或者delete时 遇到过Plsql卡死问题或者导致代码执行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中执行,Sql本身拼写无误,但是出现plsql卡死的情况, 在代码中,执行sql的地方打断点debug,发现执行sql,仍然没有响应.经过网上查资料,猜测导致这种情况的原因是 可能在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 可以通过以下办法解决: 先查询锁定记

oracle 执行存储过程时出现卡死

1 问题出现: 最近刚到新公司,再看代码时,涉及到了存储过程的问题,该存储过程涉及到了表的更新操作.第一次调试的时候非常快就运行完了.第二次就卡死了,然后单步调试,发现卡死在 update 语句了. 2 问题解决      最后发现是第一次执行的时候没有提交事务,把事务提交就不会出现卡死了. 3 结论     由于在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 原文地址:https://www.cnblogs.com/wjx1993/p/953

使用Oracle ODP.NET 11g的.NET程序发布方法

使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组件性能好,更可以访问UDT(User Defined Type)类型,Procedure,REF等等高级Oracle特性.根据上面原则,最小的ODP.NET Oracle客户端发布文件包括5个文件,压缩后大小为8MB. ODP.NET 11g是Oracle发布的供.NET程序访问Oracle的ADO

PetaPoco利用ODP.NET Managed Driver连接Oracle

以下内容来源自,只是为了方便查询转载过来: http://www.cnblogs.com/yanxiaodi/p/5038387.html 大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可是环境已经没了…… 再重新配置吧,先使用nuget下载安装了PetaPoco,没想到最新的版本变动比较大,貌似缺少几个类,时间紧急没时间折腾了,于是下载了一个旧

数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例 实验所用数据表 子查询,解决一步不能求解 查询工资比scott高的员工信息: 子查询知识体系搭建: 解释3,查询部门是sales的员工信息: 方法1:子查询 [方法2]:多表: 优化考虑: 解释4[select],只能放单行子查询 解释4[from] 考题:显示员工姓名,薪水 解释

oracle job 定时执行 存储过程

oracle job 定时执行 存储过程   一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a date); Table created SQL> commit; Commit complete 2,创建一个存储过程 bb 作用是往pig表中插入数据 SQL> create or replace procedure JOB_PRO_TEST as 2  begin 3  insert int

oracle 11g rac dbca建库时提示创建监听

Oracle 11g rac dbca建库时提示创建监听 在安装oracle 11g rac时,使用dbca建库的过程中提示需要创建监听: Default Listener "LISTENER" is not configured in Grid Infrantructure home.Use NetCA to configure Default Listener and return DBCA 解决步骤如下 因为oracle 11g rac在安装过程中会自动创建监听,无需手动创建,首