Este error ya ha aparecido en dos de mis proyectos.

Tenía un Datalist (o Gridview) que estaba ligado a un ObjectDatasource, el cual se alimentaba de un Business Layer que a su vez tomaba los datos de un archivo XSD.

Estuve peléandome con todos estos objetos, checando sus propiedades, borrándolos y volviéndolos a crear, y nada funcionó.

En las dos ocasiones que se me presentó esta situación, resulta que el problema estaba en los datos!

En ambas ocasiones estaba convirtiendo la aplicación de ASP.NET 1 a ASP.NET 2, por lo que ya contaba con la base de datos y ésta ya tenia información real.

Así es que si no encuentras el problema en la lógica, checa también los datos. En uno de los casos pasaba que había un campo de fecha, el cual tenía muchos registros que tenían la fecha establecida en “0000-00-00”, es decir, no la habían capturado porque era un campo que quedó en desuso y no tuve la precisión de eliminarlo o llenarlo con una fecha válida.

El caso es que cuando la aplicación trataba de llenar el DataList, se encontraba con esa fecha inválida y regresaba el error:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

Mi solución: llené todos esos campos con fechas válidas y funcionó.

Repito, pasa muchas veces, si no encuentras el error en tu lógica, siempre revisa la validez de los datos en la base de datos.

Actualización

Me volvió a suceder el mismo error, y encontré una razón más contundente.

Resulta que mi sentencia SQL hacía un join de tres tablas. Estaba intentando colocar esa sentencia en un TableAdapter que había creado para una de las tablas:

TableAdapter para una sola tabla

El TableAdapter mostrado arriba contiene la definición de una tabla, es por eso que se pueden leer los campos id, idPostal, idusuario, etc.

Al ejecutar el join se mostraba el error descrito en la primera parte de este post.

Para solucionar esta situación tuve que pasar la sentencia que contenía el join a un nuevo TableAdapter, como se muestra a continuación:

TableAdapter para un join de varias tablas

Listo, como puedes ver el TableAdapter creado ya no contiene toda la definición de las columnas. Le cree una clase BusinessLogic la cual uso en mi código y ya no marca esos problemas. 🙂

Segunda Actualización

En otros casos puede ser la propiedad MaxLength. Por ejemplo, si en tu TableAdapter tienes esa propiedad establecida en un valor distinto al que aparece para ese mismo campo en las sentencias Insert o Update, también ocurre este error. Todos los MaxLength para el mismo campo deben ser iguales para todas las sentencias y para las propiedades mismas del adaptador.

11 comentarios sobre “Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints

  1. hola!
    He tenido este mismo error, he seguido tu ejemplo de pasar el método a un nuevo Table Adapter y crearle un nuevo Bussiness Logic, pero… ahora quiero mostrar en un datagrid mis datos y utilizo como ObjectSource ese nuevo BusinessLogic creado pero… no me muestra nada :S

  2. Quizás tu instrucción SQL no está jalando los datos correctos?
    Intenta copiar tu instrucción SQL al cliente que usas para crear las tablas y fíjate si está trayendo información. Si no, el error está en tu instrucción.

  3. Lo que puedes intentar hacer tambien en un caso de estos es modificar la columna en el tableadapter, ahi le dices allowdbnull = true con eso tambien te funciona, porque el error puede estar originado por muchas cosas y una de las que despliega ese error es esa.
    Saludos 😀

  4. Que buena respuesta hermano si cuando estamos comenzamos creemos que cuando hacemos el cambio en la base de datos se va a hacer en el dataset tambien pero ya me di cuenta que no es asi solo le fui a cambia el maxleng del campo y lo puse como en la bd y todo funciono bien.

  5. Primeramente dejame decirte que las repuestas estan muy buenas y ayudan mucho…bueno he rebicida todo lo que has escrito y tengo el mismo problema solo me falta intentar lo del nuevo tableadapter y pasar la sentencia esa parte no se como crear otro tableadapter tal vez si me detalles mas este procedimiento por favor gracias….

  6. Yo he tenido el mismo problema, mi solucion: agregar una columna id en la consulta de stored procedure. El problema tambien se debe en que en algunos casos el conjunto de resultados posee registros duplicados. Entonces agregando una columna adicional que haga de primary key resuelve el problema.

  7. Hola man bueno tengo casi este mismo problema.

    primero el dataset que uso funviona cuando ingreso datos.

    pero cuando quiero obtener un dato ejemplo:

    select count(*) from Empledos

    me sale ese mensaje

    forma me pueden ayudar

  8. gente a mi me aparecia y el problema era que una columna del dataset tipado no se estaba llenando debido a la select que estaba haciendo en un SP. En primer lugar fijense si las columnas del dataset tipado coinciden con los campos que estan trayendo en el select

  9. Yo tengo el problema de este mensaje pero al usar el control de Microsoft ReportViewer, pero si este mismo reporte lo ejecuto desde Reporting Services, se ejecuta sin ningun problema, Alguien tiene una solución

  10. Primeramente gracias, pude solucionar mi problema que llevaba mas de 2 horas intentando, la cosa que a mi me sucedio fue que la tabla estaba mal la longitud de los campos, uno que debia medir 200 media 4 y asi fue con casi todos, lo que hice fue cambiarle la longitud por la que debian de tener y con esto basto para solucionar el problema , Gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


× cuatro = 24