Problema DataReader y valor NULL

11/10/2005 - 10:11 por colosoderada | Informe spam
Hola a todo el mundo tengo un problemilla con una sentencia SQL.
Quiero hacer un insert en una tabla. Los valores los leo de otra tabla y
resulta que tengo una fecha que su valor tiene valor "NULL" estoy
concatenando en una cadena todos los valores que quiero insertar y cuando
concateno el la cadena "tipo string" con el valor null que ha leido me da
un error que no se puede concatenar símbolos.

string datos = "(";

OdbcDataReader tOdbcDataReader_origen tOdbcCommand_origen.ExecuteReader(CommandBehavior.SequentialAccess);

while (Reader_origen.Read()){

// el campos 31 es el que tiene el valor NULL pero en cuanto concateno me
salta a
// un try catch que tengo anterior y me dice que no puede concatenar
simbolos
// el campo del que se lee es un tipo fecha (date) y tiene valor NULL

datos = datos + Reader_origen.GetString(31);

}

Como puedo hacer para convertir ese NULL a string y que no me dé ningún
error ????????? Alguna ayuda o código al respendo.

Gracias por leer este mensaje.
 

Leer las respuestas

#1 Ariel Popovsky
11/10/2005 - 14:43 | Informe spam
Hola Alfonso,

Para tu problema puntual te diría que evalues en los casos donde sabes que
el valor leido puede ser nulo usando
if(Reader_origen.IsDbNull(31))
datos = datos + "null";
else
datos = datos + Reader_origen.GetString(31);

Lo que podrías abreviar asi:
datos += Reader_origen.IsDbNull(31) ? "null":Reader_origen.GetString(31);

Por otro lado te recomendaría que para realizar todas esas concatenaciones
uses un StringBuilder que esta diseñado para eso. Para concatenar un string
el runtime tiene que crear una copia nueva del string cada vez y se hace
mas costoso.
El código sería
StringBuilder datos = new StringBuilder();
datos.Append(Reader_origen.IsDbNull(31) ? "null":Reader_origen.GetString(31));

Por último, sería mucho mejor si en lugar de crear tu insert concatenando
todos los valores creas un Command y le asignas los valores como parametros.
Te evitarías problemas como un texto que contenga comillas adentro lo cual
lleva también a problemas de seguridad (ataques por inyección de SQL).
Un ejemplo de la wikipedia:

using( SqlConnection con = (acquire connection) ) {
con.Open();
using( SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE name
= @userName", con) ) {

cmd.Parameters.Add("@userName", userName);

using( SqlDataReader rdr = cmd.ExecuteReader() ){
...
}
}
}

Ariel Popovsky

Hola a todo el mundo tengo un problemilla con una sentencia SQL.
Quiero hacer un insert en una tabla. Los valores los leo de otra tabla
y
resulta que tengo una fecha que su valor tiene valor "NULL" estoy
concatenando en una cadena todos los valores que quiero insertar y
cuando
concateno el la cadena "tipo string" con el valor null que ha leido me
da
un error que no se puede concatenar símbolos.
string datos = "(";

OdbcDataReader tOdbcDataReader_origen > tOdbcCommand_origen.ExecuteReader(CommandBehavior.SequentialAccess);
while (Reader_origen.Read()){

// el campos 31 es el que tiene el valor NULL pero en cuanto concateno
me
salta a
// un try catch que tengo anterior y me dice que no puede concatenar
simbolos
// el campo del que se lee es un tipo fecha (date) y tiene valor NULL
datos = datos + Reader_origen.GetString(31);

}

Como puedo hacer para convertir ese NULL a string y que no me dé
ningún error ????????? Alguna ayuda o código al respendo.

Gracias por leer este mensaje.

Preguntas similares