MySQL - Abrir conexion mysql varias veces o mantener la conexion abierta desde VB.NET

 
Vista:

Abrir conexion mysql varias veces o mantener la conexion abierta desde VB.NET

Publicado por Mauricio Andres (2 intervenciones) el 06/07/2017 19:37:59
buenas estimados tengo un problema con una aplicacion en vb.net usando mysql. el tema es que cada vez que tengo que consultar la base de datos tengo que abrir la conexion (conexion.open) y eso me tarda entre 1 a 2 segundos asumo por que valida el servidor y las credenciales del mismo. existe alguna manera de que solo use la conexion o mantener la conexion abierta mientras estoy conectado para no tener que utilizar o validar la conexion cada vez que realice una consulta a la base de datos. muchas 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
sin imagen de perfil
Val: 23
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Abrir conexion mysql varias veces o mantener la conexion abierta desde VB.NET

Publicado por Juan (25 intervenciones) el 07/07/2017 13:22:45
Buenas Mauricio

No tengo mucho nivel en .NET, pero sí que te puedo decir que, aunque sería coherente dejar abierta la conexión con la BD, lo más seguro es abrir y cerrar la conexión cada vez que hagas operaciones en la BD. En Java o PHP se suele abrir un flujo de datos para hacer operaciones con BD y se cierra la conexión. En mi opinión, quizás deberías hacer lo mismo.

Saludos
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
sin imagen de perfil
Val: 117
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Abrir conexion mysql varias veces o mantener la conexion abierta desde VB.NET

Publicado por Nicolas (46 intervenciones) el 07/07/2017 14:06:30
Hola Mauricio.
Estoy de acuerdo con Juan y en mi experiencia lo trabajo de esa forma. Cada vez que necesito información de la BBDD o realizar alguna operación sobre ella, se abre la conexión, genero una transacción y luego se cierra.
Hasta años que mantengo esta forma de trabajar y me ha dado buenos resultados, incluso con MySQL en la red.
Para realizar la conexión puedes utilizar el ODBC de MySQL, pero en mi caso prefiero esta otra opción, tengo mas control sobre la base de datos desde la aplicación.
Te paso una clase de conexión simplificada. Espero te sirva. Abrazo.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Imports MySql.Data.MySqlClient
Imports Facturacion.Dominio
 
Namespace Persistencia
    Public Class Persistente
 
        Public CommImporta As New MySqlCommand
        Public TraImporta As MySqlTransaction
        Public mConexion As MySqlConnection
        Private mcommand As MySqlCommand
        Private mdaFactura As MySqlDataAdapter
 
#Region "Metodos accesores y modificadores"
        Property Conexion() As MySqlConnection
            Get
                Return Me.mConexion
            End Get
            Set(ByVal Value As MySqlConnection)
                Me.mConexion = Value
            End Set
        End Property
 
        Property daFactura() As MySqlDataAdapter
            Get
                Return Me.mdaFactura
            End Get
            Set(ByVal Value As MySqlDataAdapter)
                Me.mdaFactura = Value
            End Set
        End Property
 
        Property command() As MySqlCommand
            Get
                Return Me.mcommand
            End Get
            Set(ByVal Value As MySqlCommand)
                Me.mcommand = Value
            End Set
        End Property
#End Region
 
        Public Sub AbrirConexion(ByVal pBase As String)
            Try
                Conexion = New MySqlConnection("server=localhost;user id=root;password=root;database=nombredelabasededatos")
                Conexion.Open()
            Catch ex As Exception
                MsgBox("ERROR: " & ex.Message)
            End Try
        End Sub
 
        Public Sub CerrarConexion()
            Me.Conexion.Close()
        End Sub
 
        Public Function EjecutarSQL(ByVal sentencias As String) As Boolean
            Dim hecho As Boolean = False
            Me.AbrirConexion(mSucursal.BaseCentral.ToString)
 
            Dim myCommand As MySqlCommand = Conexion.CreateCommand()
            Dim myTrans As MySqlTransaction
            ' Inicia transacción local.
            myTrans = Conexion.BeginTransaction()
            ' Must assign both transaction object and connection
            ' to Command object for a pending local transaction
            myCommand.Connection = Conexion
            myCommand.Transaction = myTrans

            Try
                myCommand.CommandText = sentencias
                myCommand.ExecuteNonQuery()
                myTrans.Commit()
                hecho = True
            Catch exc As Exception
                Try
                    myTrans.Rollback()
                Catch ex As MySqlException
                    If Not myTrans.Connection Is Nothing Then
                        Throw ex
                    End If
                End Try
                Throw exc
            Finally
                Conexion.Close()
            End Try
            Return hecho
        End Function

        Public Function Devolver(ByVal CadenaConsulta As String) As DataTable
            Try
                Dim suc As String = mSucursal.Base.ToString
                Me.AbrirConexion(mSucursal.Base.ToString)
                Dim sql As MySqlCommand = New MySqlCommand
                sql.CommandTimeout = 300
                sql.Connection = Conexion
                sql.CommandText = CadenaConsulta
                sql.CommandType = CommandType.Text
                Dim DA As New MySqlDataAdapter(sql)
                Dim DT As New DataTable
                DA.Fill(DT)
                Me.CerrarConexion()
                Return DT
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

        End Function

    End Class
End Namespace
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