/ / ORA-01722:C#のINSERTに無効な数値 - Oracle 11g - C#、データベース、Oracle、plsql、oracle11g

ORA-01722 ORA-01722:C#のINSERTで無効な番号

このOracle 11gテーブルがあります

CREATE TABLE "DBNAME"."CANDIDATES"
(
"ID" NUMBER(24,0),
"USRINS" VARCHAR2(30 CHAR),
"DATINS" DATE,
"USRUPD" VARCHAR2(30 CHAR),
"DATUPD" DATE,
"EXM_ID" NUMBER(24,0),
"TYPE" NUMBER(3,0),
"PSN_ID" NUMBER(24,0),
"KOD" NUMBER(20,0),
"STATUS" NUMBER(20,0),
"PRICINA" VARCHAR2(200 CHAR)
)

今、私はC#でこのコマンドを持っている

string insertIntoCandidates = "INSERT INTO CANDIDATES " &
"(USRINS, DATINS, PSN_ID, KOD, STATUS, PRICINA) " &
values ("
+ ":usrins, "
+ ":datins, "
+ ":psn_id, "
+ ":kod, "
+ ":status, "
+ ":pricina"
+ ") ";

command.Parameters.Add(":usrins", null);
command.Parameters.Add(":datins", DateTime.Now);
command.Parameters.Add(":psn_id", getPsnIDByEMBG(result.embg));
command.Parameters.Add(":kod", result.kod_kandidat);
if (result.status)
{
command.Parameters.Add(":status", 1);
}
else
{
command.Parameters.Add(":status", 0);
}

command.Parameters.Add(":pricina", result.pricina);

int res = command.ExecuteNonQuery();

値を挿入しない列は、null値を取得します。 最後の行を実行した後、例外ORA-01722:番号が無効です。私は答えを探してみましたが、何の運もありませんでした。手伝ってもらえますか。ありがとう

回答:

回答№1は2

アン ORA-01722 試行すると( "invalid number")エラーが発生する文字列を数値に変換するために作成された文字列で、有効な数値に変換することはできません。そのため、正しいデータ型のパラメータを確認してください。

そしてまた見なさい:

Oracle用のC#パラメータ化クエリ - 深刻で危険なバグ!

そして

ORA-01722(無効な番号)が表示されるのはなぜですか。


回答№2の場合は1

michaosの答えに加えて、それはまたそれに注意してくださいパラメータの名前に関係なく、パラメータは問合せに表示される順序で追加する必要があります。そうでない場合は、誤解を招くようなORA-01722(およびその他の)エラーが発生する可能性があります。


回答№3の場合は0

の代わりに null あなたは使用する必要があります DBNull.Value


回答№4の場合は0

追加する

command.BindByName = true;

どうやらOracleは名前のバインディングの代わりに位置のバインディングをデフォルトとしています。