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:
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:
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.