Problema al manejar el "\ 0" en la base de datos del servidor Sql a través de los parámetros de comando

Cuando realizo una consulta de datos de una base de datos de MS SQL Server a través del código C # [.Net 4] y agrego un parámetro a la consulta con un valor de "\0", el lector de datos se obtiene sin excepción y cuando leo los datos del lector de datos, obtengo la excepción.

Para propósitos de prueba, he utilizado el "\0" en lugar de un GUID, ¿hay alguna forma de solucionar este problema que no sea en el extremo de entrada?

preguntado el 08 de noviembre de 11 a las 09:11

@sehe no está seguro, podría ser un problema para convertir valores después de que se devuelvan desde la base de datos. Eso no sería un error en mi humilde opinión. -

@saravanan, por favor, brinde un poco más de detalles. ¿Qué aspecto tiene la mesa? Publique también la consulta exacta y los tipos de parámetros. -

Ok, estoy de acuerdo en que necesita mostrar más código. Sin embargo, el problema es que antes de recibir un resultado, se trata de pasar valores (posiblemente no válidos) a un comando de consulta preparado:

@sehe: y para Marnix van Valen. Fue mi error, en realidad me sale el error cuando leo los datos del lector de datos, lo había verificado hasta ejecutar el lector y omití el lector. Leer () llamar .. de todos modos .. gracias por su respuesta -

¿Por qué no proporciona la información que la gente solicita? -

1 Respuestas

Creo que está confundiendo varios sabores de Null (.NET Clr null referencias, base de datos NULL valores y literales de caracteres ASCII 0).

Si desea pasar una cadena vacía en C # pase

string emptyString = String.Empty

Para pasar un pase de valor nulo null;

string nullString = null;

Sin embargo, para pasar la base de datos NULL, pasar DBNull

dbParam.Value = string.IsNullOrEmpty(str)? DBNull.Value : str;

Véase también   SqlParameter con valor anulable da error mientras ExecuteNonQuery?  

contestado el 23 de mayo de 17 a las 15:05

Por favor. Tenga en cuenta que obtuve los literales de caracteres ASCII 0 de PEX durante la prueba. ¿Hay alguna forma de filtrar los literales de 0 caracteres con comprobaciones en C #? - Saravanan

Por supuesto. Solo busca el personaje (.IndexOf), reemplázalo (.Replace("\0", " ")) o simplemente compáralo (string.Equals(str, "\0")? DBNull.Value : str) - sehe

Ahora estoy haciendo lo que dijo, pero informando como un valor incorrecto en lugar de reemplazarlo. Gracias por las claras explicaciones. - Saravanan

Si ha trabajado con Pex y Moles, déme su uso en pruebas unitarias. Actualmente estoy explorando en estos. - Saravanan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.