Problemas con el NULL Sql Server 2005

Respuesta de
Usuario
Hola experto pues eso... como te cuento, pasa lo siguiente tengo una aplicación en asp.net con código vb.net y tengo una base de datos sql server 2005. tengo demasiados campos que son numeric otros que son nvarchar, lo que sucede es lo siguiente en mi paginas de asp.net muestro en cajas de texto la consulta traida de la base de datos 
por ejemplo
en el textbox1 debo incluir la siguiente consulta, para este ejemplo partamos de que el campo que voy a llamar en el data set esta nulo asi pues te explico de la siguiente forma
me.textbox1.text= ds.table(0).rows(0).item("campo_null")
Inmediatamente se me arroja un error diciendo que no puede traer un campo null de la base de datos me imagino que en tu amplia experiencia se te abra presntado este problema y ya sabrás solucionarlo por eso acudo a ti
debo solucionar esto por que lo otro que se me ocurre es poner toda la base de datos como nvarchar, y obviamente eso no se puede así que super mala idea
entonces te pregunto
* como se maneja los null cuando se los asignas a un textbox
* para manejarlos se nesecita importar un nombre de espacio
* se hace mediante codigo o se hace mediante una propiedad en la base de datos
te agradesco tu valiosa ayuda, ya he investigado y no he dado con el chiste, te agradesco mucho de antemano
Avatar
Experto
Hola Aicardo
Bueno pues si me ha pasado eso que comentas, pues te comento que hay varias formas de solucionar esto, pero te comento las más sencillas:
1.- En el Sql Management entras a tu Bd y tu Tabla(s) click derecho->Diseñar y para las columans que puedan tener nullos ponle como valor default ''. (Nada comilla simple sin espacio) esto hará que en tus tablas en ves de guardarte un NULL te pone nada...
2.- En tu consulta para llenar tu DadatSet en los campos que puedan tener NULL usas la función ISNULL ejemplo:
SELECT ISNULL(Campo1,'') as Campo1, ISNULL(Campo2,'') as Campo2... From TuTabla Where .....
Yo te recomendaría la primera ya que le ahorraras trabajo al Sql en vez de hacer las consultas de la segunda forma. Pero si acaso necesitas mantener los campos Null pues usas la segunda.
Saludos.
Usuario
Hola experto muchas gracias por tu pronta respuesta a todas mis preguntas, me gustaría que me hicieras más aclaración por que la verdad no te entiendo, muchas gracias, estoy seguro de que esa es la solución pero no se como emplearla, ¿podrías explicarme un poco mejor?. Muchas gracias
Avatar
Experto
Ok. Va explicado más detalladamente.
Caso 1.- poner por default valor vacío '' a las columnas que pueden tener valores nulos.
Abres tu sql management te abres tu Bd y buscas la tabla que vas a modificar, le das click derecho a tu tabla, luego la opción Diseñar o Design, te habré una ventana con los campos de tu tabla, seleccionas el campo que te da el valor null y en la parte de abajo esta la sección de Column Propierities o propiedades de columna. Aquí en la propiedad que dice "Default Value or Binding" le pones dos comillas '' o 0(cero) si es valor numérico. Y guardas los cambios de tu tabla(realizas esto para cada campo que necesites evitar el valor NULL).
Con esto lo que logras es que en vez de tener valores NULL en tu Bd tendrás valores vacíos '' o 0 y esto no te arrojara el error que me mencionas,
caso 2.- cambiar el valor NULL en la consulta para llenar tu DataSet
vamos a tomar el caso sencillo de solo llenar un text box, supongamos que tu consulta es algo así:
Select Nombre,Apellido, RFC From Tabla
pero RFC puede o no tener valor por lo que te podria regresar un NULL y al hacer esto:
TxtRFC.Text = ds.table(0).rows(0).item("RFC") te marque el error
entonces cambias tu consulta por:
Select Nombre,Apellido,ISNULL(RFC,'Sin RFC') AS RFC From Tabla
esto lo que hace es preguntar si el campo RFC es NULL entonces pone el Valor 'Sin RFC'
por lo que al hacer esto: TxtRFC.Text = ds.table(0).rows(0).item("RFC") tu TextBox tendria el valor 'Sin RFC' en lugar de NULL que no es un valor valido.
Espero me haya explicado mejor.
Saludos
Usuario
Muchas gracias experto entiendo a la perfección pero sucede un problema y es que yo no quiero que me cambie un null por un cero en el caso de los valores que son numéricos, por que, bueno es sencillo un cero seria un valor representativo, en el caso de la aplicación que estoy manejando un cero es un cero no es un nada, lo que te trato de explicar es que se podría tomar ese cero como referencia de un valor, y no como un no hay info, me entiendes
me podrías decir como solucionar esto, es decir funciona muy bn para los valores tipo texto, pero con los valores numérico yo quiero que me deje vacío, y no un cero, es esto posible
muchísimas gracias por la aclaración, puede implementar la solución que me diste. Ahora solo me queda saber si en un campo numérico se puede dejar vacío
Usuario
Entonces debido al tiempo que ha pasado debo suponer, que no se puede dejar valores vacíos en campos numéricos, gracias
Avatar
Experto
Hola disculpa la tardanza pero he estado muy ocupado y no he tenido chance de revisar las preguntas. Con respecto a tu pregunta:
Si lo puedes hacer con la misma función que te comente solo que tendrás que hacer un convert del dato de int->nvarchar o char
ejemplo:
select isnull(convert(nvarchar(20),numero),'sin valor') from Tutabla
Saludos.
Usuario
No te preocupes Experto, Tarde pero increíblemente genial tu respuesta. Ya lo logre hacer, muchas gracias