c# - 为什么我会收到 ORA-01722(无效数字)?

标签 c# oracle ora-01722

我一直在使用参数化查询将值插入到 Oracle 表中,如下所示:

var q = "insert into MyTable(Field1, Field2...) values(:Field1, :Field2...)";
var cmd = new OracleCommand(q, conn); // conn is a pre-existing connection
cmd.Parameters.Add("Field1", field1Val); 
cmd.Parameters.Add("Field2", field2Val);
// etc...
cmd.ExecuteNonQuery();

这一直运行良好,但突然停止运行,我收到 Oracle 错误 ORA-01722(无效数字)。我检查了参数,所有数字都是毫无疑问的有效数字。我什至用虚拟值替换了任何空值,但我仍然得到错误。我在直接 sql 中尝试了相同的查询(使用 OraDeveloper Studio),即使使用相同的参数,它也能正常工作。

我如何追踪这个?

编辑:根据评论中的请求,这里是创建表语句:

CREATE TABLE ALPHA.VISITFINDINGS (
  ID NUMBER(12),
  VISITID NUMBER(12) NOT NULL,
  DESCRIPTION VARCHAR2(100),
  CUSTOMIMAGE CLOB,
  VISUALFINDINGSSECTIONMAPID NUMBER(12),
  FINDINGSID NUMBER(12),
  CONSTRAINT FK_VISITFINDINGS_AREA FOREIGN KEY (VISUALFINDINGSSECTIONMAPID)
    REFERENCES ALPHA.VISUALFINDINGSSECTIONMAP(VISUALFINDINGSSECTIONMAPID),
  CONSTRAINT FK_VISITFINDINGS_FINDINGS FOREIGN KEY (FINDINGSID)
    REFERENCES ALPHA.FINDINGS(FINDINGSID),
  CONSTRAINT FK_VISITFINDINGS_VISIT FOREIGN KEY (VISITID)
    REFERENCES ALPHA.VISITS(VISITID),
  CONSTRAINT PK_VISITFINDINGS PRIMARY KEY (ID))
TABLESPACE USERS
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

最佳答案

我已经给出了答案,但我认为这里值得一提的是我的问题的确切根源,以防其他人在寻找自己问题的答案时找到这个项目。

问题是 Oracle 的参数化查询的 C# 实现包含一个严重且具有潜在危险的错误 - 一个真正的“公共(public)领域的坑”:

参数的名称无关紧要;它们必须按照它们在查询中出现的顺序添加。

查看更多here .

关于c# - 为什么我会收到 ORA-01722(无效数字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866275/

相关文章:

c# - 如何加载 App.config 文件?

javascript - 将图像作为 BLOB 上传到 Oracle DB 时出现 PHP OCI8 警告

Oracle db 给出 ORA-01722 似乎没有任何原因

c# - 在单词处拆分字符串 - 保留左侧

c# - 在基类型中引用派生类型是一种不好的形式吗?

sql - oracle - 为每两种类型获取最高值

oracle - 使用 START WITH 从查询创建序列

c# - 将新所有者分配给约会。 "There should be only one owner party for an activity"

sql - 在 Oracle BIND 变量中声明多个值