[英]Why am I getting an ORA-01722 (invalid number)?
我一直在使用參數化查詢將值插入到 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;
當您說您檢查了參數時,您的意思是 SqlCommand 類上的Parameters
集合嗎? 您可能會在 SqlParameter 頁面上與此注釋發生沖突:
使用 SqlParameter 構造函數的此重載指定整數參數值時要小心。 由於此重載采用 Object 類型的值,因此當該值為零時,您必須將整數值轉換為 Object 類型,如以下 C# 示例所示。 復制
Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
如果不執行此轉換,編譯器會假定您正在嘗試調用 SqlParameter (string, SqlDbType) 構造函數重載。
我建議你使用類似的東西
cmd.Parameters.Add(
new SqlParameter("Field1", SqlDbType.Int32) { Value = field1Val });
而是顯式設置類型。
command.BindByName = true;
請看這個解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.