Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: kannalla en 5 Noviembre 2009, 02:08 am



Título: [SOLUCIONADO] Problema con Eliminar 1 registro de la base de datos
Publicado por: kannalla en 5 Noviembre 2009, 02:08 am
bueno mi problema es el siguiente... este codigo que hize funciona 100% pero hay un detalle que no me gusta y no cacho como sacarlo.. tengo una clase persona y lo llamo desde mi frmEliminar .

el problema es el siguiente.. yo para eliminar, mi sistema me exige que tenga un txtclave.text y txttipo.text (texbox1) en el formulario.

y todos sabemos que para eliminar un registro no es necesario colocar su clave y tipo , basta con el nombre o rut y listo. pero en mi caso si le saco los txtclave.text y txttipo.text no me corre y me tira errores...
alguien me puede decir donde esta el detalle para poder sacar de mi formulario los textbox


CODIGO DE LA CLASE
Código:
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Data.SqlClient
Imports System.Data
Imports Auditoria_de_impresion

Public Class clasePersona

    Public Sub New(ByVal perNombre As String, ByVal perContraseña As String, ByVal perTipo As Integer)
        Dim usuNombre As String
        Dim usuClave As String
        Dim usuTipo As Integer
        usuNombre = perNombre
        usuClave = perContraseña
        usuTipo = perTipo

    End Sub

Dim conexion As String = "Data Source=localhost\SQLExpress;Initial Catalog=BDIMPRESION;database = usuario; trusted_connection = yes;Integrated Security = True; User Instance=True"

 Public Function eliminarUsuario(ByVal usuario As String, ByVal clave As String, ByVal tipo As Integer) As Boolean
        Dim cn As New SqlClient.SqlConnection(conexion)
        Dim cmd As New SqlClient.SqlCommand("Delete from usuarios Where perNombre = '" & usuario & "' ", cn)
        Dim valor As Integer
        Try
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            End If
            valor = cmd.ExecuteNonQuery()
            MsgBox("Usuario Eliminado del Sistema ", MsgBoxStyle.Information)
        Finally
            cn.Close()
        End Try
        Return valor
    End Function

CODIGO DEL FORM

Código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim clasePersona As clasePersona = New clasePersona(txtEliminar.Text, txtclave.Text, txttipo.Text)
        clasePersona.eliminarUsuario(txtEliminar.Text, txtclave.Text, txttipo.Text)


        'If MsgBox("Desea Eliminar al Usuario", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Eliminar") = MsgBoxResult.Yes Then

        ' End If
    End Sub


Título: Re: Problema con Eliminar 1 registro de la base de datos
Publicado por: seba123neo en 5 Noviembre 2009, 02:19 am
Hola, seria bueno que digas que error te esta tirando y en que parte del codigo...mira veo varias cosas que podes mejorar, una es que la clase deberia tener sus propiedades o sea los Get y Set...la otra es que no es bueno estar conectandose y desconectandose a cada rato, te conectas una sola vez a la base y listo despues manejas esa conexion como publica y listo la usas en cualquier lado, pero no estar haciendo el .Open a cada rato...lo haces una vez y ya esta, lo mismo para las clases, las deberias declarar una sola vez como publicas y usar ese objeto en todo el proyecto cuando te de la gana, y no estar creando a cada rato la clase.un registro se borra principalmete por su ID que lo identifica y debe ser unico, ahi estas borrando por nombre y si por casualidad hay 2 personas con el mismo nombre te las borra todas..debes usar el ID, no el nombre.

saludos.


Título: Re: Problema con Eliminar 1 registro de la base de datos
Publicado por: kannalla en 5 Noviembre 2009, 15:37 pm
ahora puedo eliminar sin que tenga que agregar los textbox de contraseña y de tipo... ahora solo con el nombre y listo.

Gracias amigo Seba tuve que hacerle algunos cambios deacuerdo a tus criticas del codigo... bueno no soy tan experto en visual.. de a poquito me estoy puliendo jejjejee  aca el codigo 100% operativo


SOLUCION PARA LOS QUE LO QUIERAN:

Código:

Public Class clasePersona

    Public Sub New(ByVal perNombre As String, ByVal perContraseña As String, ByVal perTipo As Integer)
        Dim Nombre As String
        Dim Clave As String
        Dim Tipo As Integer
        Nombre = perNombre
        Clave = perContraseña
        Tipo = perTipo

    End Sub


 Public Function eliminarUsuario(ByVal usuario As String) As Boolean
        Dim cn As New SqlClient.SqlConnection(conexion)
        Dim cmd As New SqlClient.SqlCommand("Delete from usuarios Where perNombre = '" & usuario & "' ", cn)
        Dim valor As Integer
        Try
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            End If
            valor = cmd.ExecuteNonQuery()
            MsgBox("Usuario Eliminado del Sistema ", MsgBoxStyle.Information)
        Finally
            cn.Close()
        End Try
        Return valor
    End Function


Código:

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim clasePersona As clasePersona = New clasePersona("usuario", "clave", tipo)

        clasePersona.eliminarUsuario(txtNombre.Text)

    End Sub