この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は名前のバインディングの代わりに位置のバインディングをデフォルトとしています。