/ / ORA-01722: número no válido en INSERT en C # - Oracle 11g - c #, base de datos, oracle, plsql, oracle11g

ORA-01722: número no válido en INSERT en C # - Oracle 11g - c #, base de datos, oracle, plsql, oracle11g

Tengo esta mesa 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)
)

Ahora tengo este comando en 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();

Las columnas para las que no inserto un valor, puedenobtener valores nulos Después de ejecutar la última línea, obtengo la excepción ORA-01722: número no válido. Intenté buscar una respuesta, pero sin suerte. ¿Podrías ayudarme? Gracias

Respuestas

2 para la respuesta № 1

Un ORA-01722 ("número inválido") error ocurre cuando un intentoestá diseñado para convertir una cadena de caracteres en un número, y la cadena no se puede convertir en un número válido. Por lo tanto, compruebe los parámetros para los tipos de datos correctos.

Y también ver:

Consultas parametrizadas de C # para Oracle - ¡error serio y peligroso!

y

¿Por qué obtengo un ORA-01722 (número no válido)?


1 para la respuesta № 2

Además de la respuesta de michaos, también tenga en cuenta queNo importa cómo nombre sus parámetros, tienen que agregarse en el orden en que aparecen en la consulta. Si no, puede obtener errores ORA-01722 engañosos (y otros). ¡Sí, este es un error horrible!


0 para la respuesta № 3

En lugar de null tienes que usar DBNull.Value


0 para la respuesta № 4

añadir

command.BindByName = true;

aparentemente, el valor predeterminado de Oracle es el enlace de posición en lugar del enlace de nombre.