none
Problema con base de datos usando XSD

    Question

  • Tengo una aplicación relativamente que estoy manteniendo hace unos meses pero originalmente no hice yo (creo que pasaron varios).
    La aplicación utiliza SQL Server y la interacción con la base de datos es toda mediante un XSD donde se crean todos los SELECT, INSERT, etc.
    Desconozco como se llama esté método ya que nunca lo había utilizado y me gusta más programar directamente que andar configurando un archivo, pero debo seguir así ya que como dije es bastante grande y no da para cambiar todo.

    Con el tiempo lo fui aprendiendo e hice cambios de todo tipo (nuevas tablas, nuevos querys, modificaciones, etc). 
    Ahora me surgió un problema, en una sección que jamás toqué y el error es el siguiente:

    No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY.
    ....
    Archivo de origen: 
    c:\Users\Leonardo\AppData\Local\Temp\Temporary ASP.NET Files\xxxxxxxx\0c934129\98c0c103\App_Code.0ryucdbu.27.cs    Línea: 27243 

    En primer lugar no entiendo porque me da ese error siendo un "SELECT", si fuera un "INSERT" claramente estaría intentando poner NULL en un lugar no permitido.
    En segundo lugar no puedo debuguear mucho ya que como se ve es en uno de los archivos que se auto-generan.
    En tercer lugar si voy al XSD y hago uso de la opción "Ver previa de datos" en el SELECT que me provoca el error desde el código (llamemoslo "GetDatos"), me trae los datos correctamente.

    Que puede suceder????



    • Edited by lcattani Sunday, February 26, 2012 4:01 AM
    Sunday, February 26, 2012 3:57 AM

Answers

  • Desconozco como se llama esté método ya que nunca lo había utilizado

    se llama DataSet tipados

    No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY.

    e casualidad has realziado algun cambio a nivel de base de datos que no reflejaste en el dataset tipado, recuerda que este xsd basicamente mentiene un mapeo con tu tabla fisica en la db, pero el cambio no es automatico, si cambais algun tipo o nombre de campo debes cartualziar el datatable que esta dentro del dataset tipado

    por lo que se puede ver quizas en algun campo habilitaste para que permita nulos pero anteriormente nos e podia y asi quedo en el xsd

    esta diferencia es la que causa el problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marked as answer by lcattani Sunday, February 26, 2012 11:21 PM
    Sunday, February 26, 2012 4:05 AM

All replies

  • Desconozco como se llama esté método ya que nunca lo había utilizado

    se llama DataSet tipados

    No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY.

    e casualidad has realziado algun cambio a nivel de base de datos que no reflejaste en el dataset tipado, recuerda que este xsd basicamente mentiene un mapeo con tu tabla fisica en la db, pero el cambio no es automatico, si cambais algun tipo o nombre de campo debes cartualziar el datatable que esta dentro del dataset tipado

    por lo que se puede ver quizas en algun campo habilitaste para que permita nulos pero anteriormente nos e podia y asi quedo en el xsd

    esta diferencia es la que causa el problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marked as answer by lcattani Sunday, February 26, 2012 11:21 PM
    Sunday, February 26, 2012 4:05 AM
  • Gracias por responder, pensé que era automático.
    Pero porque al crear nuevas tablas los tamaños si se cargaron correctamente?
    Yo simplemente agregué la tabla y columnas en el XSD, jamás configuré los len no allow null ni nada y en esos casos está todo correcto.

    De todas formas estoy seguro de que no hice que nada acepte NULL, nunca permito NULL's ya que traen bastantes problemas al ser NULL != "" (vacío).
    Pero claro, lo que no fueron creados por mi seguramente lo permitan.

    De todas formas porque usando "Ver previa de datos" si funciona?

    Pero supongamos que lo permití por error, tengo que revisar campo por campo de tabla por tabla?
    Ya revisé las 2 tablas implicadas y aparentemente no hay diferencias.

    Sunday, February 26, 2012 2:34 PM
  • De todas formas porque usando "Ver previa de datos" si funciona?

    porque seguramente la vista previa este tomando un conjunto de datos que de casualidad valdia contra la definicion del datatable tipado

    pero con que uno solo de los registros presente el problema, si justo ese se selecciona ahi se produce el fallo

    Pero porque al crear nuevas tablas los tamaños si se cargaron correctamente?

    porque las nuevas tablas se sincronizaron con al estructura actrual de tablas, si ahces un cambio en algun creada rpeviamente esa debes tambien actualizarla en el xsd, esto no es automatico, es una tarea manual

    Pero supongamos que lo permití por error, tengo que revisar campo por campo de tabla por tabla?

    podrias ahcerlo campo a campo, o sino ash agregadoi nunguna extension ene se datatable simplemente lo eliminas y arrastras desde el server explorer nuevamente la tabla

    Nota: recuerda realizar un backup de la aplicacion previa a realizar estos cambios, un zip de la solucion alcanzara por las dudas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, February 26, 2012 3:32 PM
  • Borre la tabla del XSD. la volví a crear (con todos sus querys asociados) y sigue igual!!

    :(

    Sunday, February 26, 2012 7:02 PM
  • que serian los queries asociados ?

    no se estara produciendo el problema cuando ejecutas uno de estos queries ?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, February 26, 2012 7:08 PM
  • Es lo que dije en el primer mensaje:

    "...si voy al XSD y hago uso de la opción "Ver previa de datos" en el SELECT que me provoca el error desde el código (llamemoslo "GetDatos"), me trae los datos correctamente...."

    Cuando digo querys asociados me refiero a los querys del TableAdapter que dependen de la tabla en cuestión (ver imagen).
    Estoy haciando otra prueba tratando de acotar el error...

    Sunday, February 26, 2012 7:21 PM
  • prueba de esta manera en el dataset que te esta dando el problema la siguiente propiedad EnforceConstraints=false, te dejo una imagen

    Saludos


    Capacitaciones Corporativas
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense
    Ay Nicaragua, Nicaraguita Video Clip

    Sunday, February 26, 2012 7:23 PM
  • Creo que lo solucioné!!

    Confirmo y explico!!!

    Sunday, February 26, 2012 7:24 PM
  • prueba de esta manera en el dataset que te esta dando el problema la siguiente propiedad EnforceConstraints=false, te dejo una imagen

    Saludos


    Capacitaciones Corporativas
    Si pequeña es la Patria, uno grande la sueña
    Rubén Darío
    Principe de las letras Castellanas
    Poeta Nicaragüense
    Ay Nicaragua, Nicaraguita Video Clip

    Ya había leído lo del EnforceConstrains, pero yo no tengo datasets en ningún lado, todo está basado en el XSD.
    Ya postéo como lo solucioné.

    EDIT: Ahora me doy cuenta que justamente esa opción estaba en las propiedades del XSD. Seguramente habría funcionado también.
    • Edited by lcattani Sunday, February 26, 2012 11:26 PM
    Sunday, February 26, 2012 7:35 PM
  • El problema era el siguiente:

    La tabla y por lo tanto el DataTable en el XSD tenían 16 campos.
    El SELECT que fallaba seleccionaba 15 campos (faltaba el último), agregué el último y funcionó!!!

    Finalmente para hacerlo más sencillo simplemente seleccioné Tabla.* y siguió funcionando!!!

    Al Fin, ya no sabía que otra prueba hacer!!
    Lo raro es que esto nunca debe haber funcionado y el cliente recién ahora se da cuenta!!

    Gracias!!!

    Sunday, February 26, 2012 7:51 PM