none
Problema con restricciones. RRS feed

  • Pregunta

  • Hola, Estoy intentado restringir los campos para evitar que se inserten datos repetidos como matrículas o DNIs, pero cuando inserto los datos me sale el típico error:

    "No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY." 
    El error me sale al iniciar el formulario.
    He comprobado los datos y observo que en los campos donde están restringidos los valores, no hay ningún valor nulo, todos los campos tienen su matrícula insertada.

    He leído la ayuda y me dice lo siguiente:

    Amplíe o desactive las restricciones en el conjunto de datos.

    Puede utilizar la propiedad EnforceConstraints para desactivar temporalmente las restricciones mientras se rellenan las tablas en un objeto DataSet.

    Asegúrese de que no intenta asignar un valor a un campo de clave principal donde la clave principal ya existe en la tabla de datos.

    Si la clave principal ya existe, se produce esta excepción.

    Borre los conjuntos de datos antes de cargarlos del estado de vista.

    Si hay datos en el conjunto de datos cuando lo carga, se puede producir esta excepción.

     

    La única posible solucción que se me ocurre sería la última, borrar el conjunto de datos cuando lo cargo, pero no se exactamente como lo tengo que hacer.

    Por el momento trabajo con datasets tipados y cargo los datos con el método fill del tableacapter.

    Y una pregunta más.. ¿Como puedo comprobar antes de insertar los datos en la base de datos si una matrícula está ya incluida, antes de que genere un error por estar incluida?... Se me ocurre realizar una consulta al salir del textbox de la matrícula, pero desconozco si es el método adecuado.

    Gracias anticipadas por vuestra ayuda. 

    martes, 18 de mayo de 2010 8:59

Respuestas

  • hola

    me suena como que algun campo esta entrando en conflicto con las restricciones de la db.

    lo que podrias ir probando es no modificar todos los campos, sino de a poco para identificar cual es el del problema.

    realiza una prueba modificando solo uno hasta que veas que falla, apunta principlamente, a los que sepas que no permiten null, y a los campos de claves con otras tablas

    asegurate tambien que el datatable de dataset tipado tiene la misma estructura de la tabla en el db, si has agregado campos en la tabla de tu db, deberias reflajar en cambio en el datatable

     

    para validar si la matricula existe podrias crear en el TableAdapter de tu dataset tipado un nuevo metodo creado por ti, sigue este articulo alli explica muy bien como agregar funcionalidad extra al tablaadapter:

    Building a DAL using Strongly Typed TableAdapters and DataTables in VS 2005 and ASP.NET 2.0

    por supuesto deberias agreagar un metodo en donde le pases el id o numero de matricula y este devuelva el registro o un valor indicando si existe
    podrias devolver el count de los registros

    SELECT COUNT(*) FROM Tabla WHERE matricual = @matricula

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta poliems martes, 18 de mayo de 2010 19:48
    martes, 18 de mayo de 2010 12:45

Todas las respuestas

  • hola

    me suena como que algun campo esta entrando en conflicto con las restricciones de la db.

    lo que podrias ir probando es no modificar todos los campos, sino de a poco para identificar cual es el del problema.

    realiza una prueba modificando solo uno hasta que veas que falla, apunta principlamente, a los que sepas que no permiten null, y a los campos de claves con otras tablas

    asegurate tambien que el datatable de dataset tipado tiene la misma estructura de la tabla en el db, si has agregado campos en la tabla de tu db, deberias reflajar en cambio en el datatable

     

    para validar si la matricula existe podrias crear en el TableAdapter de tu dataset tipado un nuevo metodo creado por ti, sigue este articulo alli explica muy bien como agregar funcionalidad extra al tablaadapter:

    Building a DAL using Strongly Typed TableAdapters and DataTables in VS 2005 and ASP.NET 2.0

    por supuesto deberias agreagar un metodo en donde le pases el id o numero de matricula y este devuelva el registro o un valor indicando si existe
    podrias devolver el count de los registros

    SELECT COUNT(*) FROM Tabla WHERE matricual = @matricula

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta poliems martes, 18 de mayo de 2010 19:48
    martes, 18 de mayo de 2010 12:45
  • Ok, muchas gracias por la información, voy a repasar la base de datos, los textos y a investigar bien a ver como lo hago.
    martes, 18 de mayo de 2010 19:48