none
como evitar guardar registros duplicados RRS feed

  • Pregunta

  • tengo una tabla con los campos nombre y apellido, y dni, pero quiero que el boton save del bindingnavigator, verifique en la base si el dni ingresado en el texbox ya existe, y muestre el mensaje de "ya existe dni", y si no existe que lo guarde
    • Cambiado Enrique M. Montejo domingo, 19 de febrero de 2012 10:07 acceso a datos (De:Lenguaje VB.NET)
    martes, 14 de febrero de 2012 20:18

Todas las respuestas

  • hola

    imagino podrias suar el eventos

    AddingNew

    para definir alli la validacion, digo no podrias hacerlo en un boton simple, porque la validacion que quieres lograr es facil

    [ADO.NET] Parte 5 - Ejemplos Simples Operaciones CRUD

    como se muestra en el ejemplo en el metodo Exists() alli se valida si ese dato esta presente en algun registro anterior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 14 de febrero de 2012 23:45
  • antes de formular mi pregunta ya habia leido tu blog, y el codigo de ejemplo me cuesta un poquito
    miércoles, 15 de febrero de 2012 2:42
  • Hola,

    A ver si puede entender la siguiente explicación

    1-Agregate la siguiente funcion para validar que el registro ya existe

        Function Existe(ByVal id As Integer, con As String) As DataTable
            Dim cn As New SqlConnection(con)
    
            Dim cmd As New SqlCommand("sp_exite", cn)
            Dim da As New SqlDataAdapter(cmd)
            Dim dt As New DataTable
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@id ", id)
            Try
                da.Fill(dt)
    
            Catch ex As Exception
    
            End Try
    
            Return dt
    
        End Function

    2-El procedimiento se declara de la siguiente manera

    CREATE PROCEDURE sp_existe
    @ID INT
    AS
    
    SELECT COUNT(*) 
    FROM dbo.hd_Cliente 
    WHERE CLIENTE_ID =@ID

    3-Agregate la siguiente metodo para agregar el cliente

     Public Function add_clientes(ByVal sConexString As String) As Integer
    
            Dim ocmd As New SqlCommand
            Dim oTrans As SqlTransaction = Nothing
            Dim lResult As Integer
            Dim Sb As New StringBuilder
            Dim oConex As New SqlConnection
    
            Try
                oConex.ConnectionString = sConexString
                oConex.Open()
    
                oTrans = oConex.BeginTransaction(IsolationLevel.ReadCommitted)
                ocmd.Connection = oConex
                ocmd.CommandType = CommandType.StoredProcedure
                ocmd.Transaction = oTrans
    
                ocmd.Parameters.AddWithValue("@Nombre ", valor1)
                ocmd.Parameters.AddWithValue("@Apellido ", valor2)
                ocmd.Parameters.AddWithValue("@direccion ", valor3)
                ocmd.Parameters.AddWithValue("@telefono ", valor4)
    
                ocmd.CommandText = "add_clientes"
    
                lResult = CType(ocmd.ExecuteNonQuery(), Integer)
    
                Sb.Length = 0
                If lResult > 0 Then
                    oTrans.Commit()
                    Return True
                Else
                    oTrans.Rollback()
                    Return False
                End If
    
            Catch oExcep As Exception
                Try
                    oTrans.Rollback()
                Catch ex As Exception
                    Throw New Exception(ex.Message)
                End Try
                Throw New Exception(oExcep.Message)
            Finally
                ocmd.Dispose()
                If oConex.State = ConnectionState.Open Then oConex.Close()
            End Try
    
        End Function

    4-Agrege el siguiente codigo el evento del boton agregar

        Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
    
            Dim dt As New DataTable
            Dim result As Integer
            dt = Existe(15, "conexion") 'Valido si existe el registro ante de insertarlo a la base de datos
            If dt.Rows.Count > 0 Then ' si el registro retorna un valor mayor que "0" es por que el registro ya existe
                Exit Sub ' saldo del procedimiento
            Else
                'Inserto los registro 
                result = add_clientes("conextion")
    
                If result = 0 Then
                    'a ocurrido un errror 
                Else
                    'Los registro fueron registrado correctante
                End If
    
                ' End If
            End If
    
        End Sub

    espero que ahora si pueda entener el como se valida para que no registre datos duplicado.

    suerte


    Santo Domingo

    martes, 21 de febrero de 2012 20:36