none
como lo hago RRS feed

  • Pregunta

  • tngo un formulario de visual.net 2010 en cual tengo insetada una base de datos creada en sql y qiero aser que cuando inserte un dato de la tabla me busque si existe ese dato me mande unna alerta de q ya exist y si aun no exist q me dje agregar mas datos

    sábado, 26 de noviembre de 2011 5:18

Respuestas

  • Hay varias formas de hacer esto.

    Una forma es consultar desde tu aplicacion si el registro existe antes de ejecutar la insercion.

    Otra forma es en la tabla escribir un INSTEAD OF trigger que verifique la existencia del registro y solo inserte si el registro no existe. Si el registro existe, el trigger puede lanzar un error que tendrias que manejar desde la aplicacion.

    Otra forma es poniendo constraints en la tabla. Como un UNIQUE INDEX para que cualquier intento de insercion que viole el constraint devuelva un error. Como en el caso anterior, la aplicacion tendria que estar preparada para manejar el error lanzado por la base de datos.

    Saludos,

    Monica

    sábado, 26 de noviembre de 2011 7:55
  • Hola.

    Te recomiendo que encapsules eso mismo en un procedimiento almacenado que realice la verificación con una sentencia "if exists". Sería más o menos así:

    create proc p_Insertar_En_MiTabla (@par1 int, @par2 varchar(10)) as
    
    declare @ret int
    
    if exists (select campo1 from MiTabla where campo1 = @par1)
      select @ret = -998
    else
      begin
        insert MiTabla (campo1, campo2) values (@par1, par2)
        if @@error = 0
          select @ret = 0
        else
          select @ret = -999
      end
    
    return @ret
    go
    
    
    


    Luego desde tu aplicación llamas al procedimiento y controlas el valor de retorno para determinar si se hizo la inserción, si el registro ya existía, etc, dándole un mensaje de error al usuario en la línea de lo sucedido.

    Comento también las alternativas sugeridas por Mónica, con el debido respeto. La integridad referencial es preciso implementarla independientemente de cómo vayas a realizar las inserciones. Debes crear las restricciones, informándole lo más posible al motor sobre los datos que le llegarán, ganas en robustez y rendimiento. Sin embargo, dejar que se ocupe la integridad referencial de ello es efectivo, pero poco manejable para la aplicación, porque los mensajes de error que se elevan son más difíciles de tratar (son de severidad demasiado elevada). Es mucho más fácil de gestionar hacer comprobaciones previas.

    El uso de triggers instead of para el control de duplicados yo nunca lo implementaría. Los triggers son oscuros a la hora de la administración, y más los triggers instead off, que son justo para que se haga diferente de la que se mandó ejecutar. En este caso existen muchas otras formas de lograr lo mismo, más transparentes para el desarrollador y para el administrador.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 26 de noviembre de 2011 8:56
    Moderador
  • De acuerdo con Alberto en que la forma mas recomendable es la primera. Error mio el de no indicar cuales son las ventajas de algunas opciones sobre otras.

    Gracias por el comentario.

    Monica

     

    sábado, 26 de noviembre de 2011 9:13

Todas las respuestas

  • Hay varias formas de hacer esto.

    Una forma es consultar desde tu aplicacion si el registro existe antes de ejecutar la insercion.

    Otra forma es en la tabla escribir un INSTEAD OF trigger que verifique la existencia del registro y solo inserte si el registro no existe. Si el registro existe, el trigger puede lanzar un error que tendrias que manejar desde la aplicacion.

    Otra forma es poniendo constraints en la tabla. Como un UNIQUE INDEX para que cualquier intento de insercion que viole el constraint devuelva un error. Como en el caso anterior, la aplicacion tendria que estar preparada para manejar el error lanzado por la base de datos.

    Saludos,

    Monica

    sábado, 26 de noviembre de 2011 7:55
  • Hola.

    Te recomiendo que encapsules eso mismo en un procedimiento almacenado que realice la verificación con una sentencia "if exists". Sería más o menos así:

    create proc p_Insertar_En_MiTabla (@par1 int, @par2 varchar(10)) as
    
    declare @ret int
    
    if exists (select campo1 from MiTabla where campo1 = @par1)
      select @ret = -998
    else
      begin
        insert MiTabla (campo1, campo2) values (@par1, par2)
        if @@error = 0
          select @ret = 0
        else
          select @ret = -999
      end
    
    return @ret
    go
    
    
    


    Luego desde tu aplicación llamas al procedimiento y controlas el valor de retorno para determinar si se hizo la inserción, si el registro ya existía, etc, dándole un mensaje de error al usuario en la línea de lo sucedido.

    Comento también las alternativas sugeridas por Mónica, con el debido respeto. La integridad referencial es preciso implementarla independientemente de cómo vayas a realizar las inserciones. Debes crear las restricciones, informándole lo más posible al motor sobre los datos que le llegarán, ganas en robustez y rendimiento. Sin embargo, dejar que se ocupe la integridad referencial de ello es efectivo, pero poco manejable para la aplicación, porque los mensajes de error que se elevan son más difíciles de tratar (son de severidad demasiado elevada). Es mucho más fácil de gestionar hacer comprobaciones previas.

    El uso de triggers instead of para el control de duplicados yo nunca lo implementaría. Los triggers son oscuros a la hora de la administración, y más los triggers instead off, que son justo para que se haga diferente de la que se mandó ejecutar. En este caso existen muchas otras formas de lograr lo mismo, más transparentes para el desarrollador y para el administrador.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 26 de noviembre de 2011 8:56
    Moderador
  • De acuerdo con Alberto en que la forma mas recomendable es la primera. Error mio el de no indicar cuales son las ventajas de algunas opciones sobre otras.

    Gracias por el comentario.

    Monica

     

    sábado, 26 de noviembre de 2011 9:13
  • tngo 1 formulario de visual.net 2010 en cual tengo inseRtada una base de datos creada en sql graficamente y qiero aser que cuando inserte un dato dela tabla me busque si existe ese dato me mande unna alerta de q ya exist y si aun no exist q me dje agregar mas datos ,ya shek esto http://ka0stj.wordpress.com/category/visual-basic-net/  pero aun no puedo y la verdad no soi  experta en esto porfavor expliquenme pero algo sencillo

    lunes, 28 de noviembre de 2011 20:56
  • lunes, 28 de noviembre de 2011 21:25
    Moderador