Visual Basic.NET - Guardar en varias tablas mysql

 
Vista:
sin imagen de perfil

Guardar en varias tablas mysql

Publicado por Javier (1 intervención) el 20/12/2015 02:43:56
Buenas.

Soy nuevo en el lenguaje Visual Basic .NET, después de un tiempo de buscar en la web no puedo realizar la inserción en dos tablas.

Tengo lo siguiente
Diagrama entidad relacion
ER-BD

El código lo quiero modular, el Control se encarga de validar reglas de negocio armar querys y ejecutar lo relacionado a la persistencia
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Imports MySql.Data.MySqlClient
 
Public Class UsuarioControl
    Friend conn = New Persistencia
    Public Sub guardarUsuario(ByVal usuario As UsuarioDTO, persona As PersonaDTO)
        'Se valida lo relacionado al negocio y posterio a ello se llama los metodos de guardado
        Dim dtoUsuario = New UsuarioDTO
        Dim dtoPersona = New PersonaDTO
        Dim insertPersona As String
        Dim insertUsuario As String
        insertPersona = "INSERT INTO T_Persona (nombrePersona, paternoPersona, maternoPersona, emailPersona) VALUES ('" & persona.nombrePersona & "', '" & persona.paternoPersona & "', '" & persona.maternoPersona & "', '" & persona.emailPersona & "')"
 
        conn.guardarRegistro(insertPersona)
        'usuario.idPersona = a lo que regresa la linea anterior
        conn.guardarRegistro(insertPersona)
        insertUsuario = "INSERT INTO T_Usuario (usuario, contrasena, idPersona) VALUES ('" & usuario.usuario & "', '" & usuario.contrasena & "', '" & usuario.idPersona & "')"
        conn.guardarRegistro(insertUsuario)
 
    End Sub
 
End Class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Imports MySql.Data.MySqlClient
Public Class Persistencia
 
    Public conexion As MySqlConnection
 
    'Método encargado de la conexión a la base de datos
    Public Sub abrirConexion()
        Dim servidor As String = "localhost"
        Dim usuario As String = "usuario"
        Dim contrasena As String = "contrasena"
        Dim puerto As String = "puerto"
        Dim baseDatos As String = "BaseDeDatos"
 
        Try
            conexion = New MySqlConnection
            conexion.ConnectionString = "server=" & servidor &
                "; user id=" & usuario & "; password=" & contrasena &
                "; port=" & puerto & "; database=" & baseDatos & ";"
            conexion.Open()
            MessageBox.Show("Conexion exitosa")
        Catch ex As Exception
            MessageBox.Show("Error en la conexión")
        End Try
    End Sub
 
    Public Sub cerrarConexion()
    Dim id As Integer
    If conexion.State = ConnectionState.Open Then
            conexion.Close()
            MessageBox.Show("Conexion terminada")
        End If
    End Sub
 
    Public Sub guardarRegistro(ByVal query As String)
        Try
            abrirConexion()
            Dim command As New MySqlCommand(query, conexion)
            command.ExecuteScalar()
            'id = lo que regresa la linea anterior
            cerrarConexion()
            Return id
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub


Actualmente puede hacer el insert de Persona pero no puedo obtener el id, me sugieren hacer un select max para obtener el id del registro que acabo de ingresar pero ese metodo no me parece confiable.

De antemano gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Guardar en varias tablas mysql

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 21/12/2015 18:45:51
Hola

No trabajo con MySQL, tampoco me gusta la forma en que codeas tu sentencia, pero haber prueba de esta manera:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Function Guardar(ePersona as PersonaDTO) As Integer
        Dim Conn As New MySqlConnection(Aqui tu cadena de conexion)
        Dim DBComando As New MySqlCommand
        Dim ID as integer=0
        Try
            Conn.Open()
            With DBComando
                .CommandText = "INSERT INTO T_Persona(nombrePersona,paternoPersona,maternoPersona,emailPersona) VALUES (@nombrePersona,@paternoPersona,@maternoPersona,@emailPersona);SELECT LAST_INSERT_ID()"
                .CommandType = CommandType.Text
                .Parameters.Add("@nombrePersona", MySqlDbType.VarChar).Value = persona.NombrePersona
                .Parameters.Add("@paternoPersona",MySqlDbType.Varchar).Value=persona.paternoPersona
                .Parameters.Add("@maternoPersona",MySqlDbType.Varchar).Value=persona.maternoPersona
                .Parameters.Add("@emailPersona",MySqlDbType.Varchar).Value=persona.emailPersona
                .Connection = Conn
            End With
            ID =Convert.ToInt32(DBComando.ExecuteScalar().ToString())
            If ID= 0 Then
                Throw New Exception("Error al insertar persona")
            End If
            Return ID
        Catch ex As Exception
           Throw New Exception("ex.Message)
        Finally
            Conn.Close()
            Conn.Dispose()
        End Try
End Function

Como podrás ver, seguido del insert, tenemos SELECT LAST_INSERT_ID(),que esperemos te devuelva el último autoincrementable, eso por ejemplo en SQL Server funciona casi igual solo que con un SCOPE_IDENTITY()

Espero te de una luz en tu camino.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar