ORA-01400无法插入空值...但我没有插入空值!

Kon*_*man 5 oracle odp.net oracle-xe ora-01400

我试图通过使用来自C#应用程序的ODP.NET在Oracle表中插入数据,但是我得到一个ORA-01400不能为我没有插入空值的列插入空值错误.

这是我试图执行的参数化SQL命令的精简版本.它包含在一个OracleCommand并执行以下的调用ExecuteNonQuery:

declare c int; 
begin
   select count(*) into c from "Entradas" where "Id" = :Id and nvl("AppId", 0) = nvl(:AppId, 0);
   if c>0 then
       update "Entradas" set
         /*...a bunch of columns...*/,
         "VisitaLaboral" = :VisitaLaboral,
         /*...some more columns...*/
         where "Id" = :Id and nvl("AppId",0) = nvl(:AppId, 0); 
   else
       insert into "Entradas" (
         /*... a bunch of columns...*/,
         "VisitaLaboral",
         /*...some more columns...*/
         ) values (
         /*...a bunch of values...*/,
         :VisitaLaboral,
         /*...some more values...*/
       );
   end if;
end;
Run Code Online (Sandbox Code Playgroud)

该行以前不存在,因此它是insert命令的一部分,即执行的那一行.当然,我已经验证所有列名和列值参数都正确放在SQL文本中.

问题出在VisitaLaboral专栏中.它的类型为NUMBER(1,0),它不接受NULL,我试图插入值0.这是Visual Studio OracleParameter在命令执行之前立即显示的关联:

在此输入图像描述

但是,如果我直接在Application Express中执行命令(直接在命令文本中提供值),它可以正常工作并插入行.

那么,这里发生了什么?ODP.NET库中是否有错误,或者我做错了什么?

附加信息:

  • 数据库是Oracle 10g Express Release 10.2.0.1.0
  • Oracle.DataAccess.dll版本是4.112.1.2
  • 使用Visual Studio 2010,以.NET Framework 4.0为目标

先感谢您!

更新:

如果我使用(已弃用的)System.Data.OracleClient类而不是ODP.NET,一切正常.

WTF,甲骨文?不,真的,WTF?

Ste*_*ger 0

您真的确定插入子句和值子句中的列顺序相同吗?检查你的“一堆列”......