Esta es una copia de un post que le respondí hace tiempo a itotra persona:
1. Para crear el enlace con el MySQL solamente tienes que instanciar un objeto MysqlConnection y asignarle un ConnectionString adecuado. Los formatos del string los encontrarás en
http://www.connectionstrings.com/mysql, por ejemplo.
2. No abras y cierres constantemente la conexión. Existe mucho más overhead en la creación de cada nuevo enlace que lo que puedes perder manteniendolo inactivo. Simplemente haz una validación de su estado antes de enviar una consulta. Si está cerrado, abrelo y listo.
3. Las consultas son instancias de MysqlCommand. Este objeto te servirá para crear lectores (MysqlDataAdapter) o bien para ejecutar cualquier cosa.
4. Un objeto MysqlConnection te permite hacer dos cosas críticas con muy poco esfuerzo: Manejar transacciones y cambiar de base, sin por ello tender que cerrar la conexion activa.
He aquí unos ejemplos:
Imports:
Código vb.net:
Ver originalImports MySql.Data.MySqlClient
Imports MySql.Data.Types
Variables:
Código vb.net:
Ver originalPrivate Conexion As MySqlConnection
Private Reader As MySqlDataReader
Private Adapter As MySqlDataAdapter
Private Sentencias As MySqlCommand
Private Trans As MySqlTransaction
Private strCx As String
Private oSql, sSql As String
Conectar: Esta versión verifica que el usuario no esté conectado ya en otro puesto. Además verifica algunos errores posibles.
Código vb.net:
Ver original' CONECTAR a la base de datos con parámetros.
Public Function Conectar(ByVal vServer As String, ByVal vBase As String, ByVal vUser As String, ByVal vPwd As String, ByVal oPort As Int16) As Boolean
Dim strCx As String
Dim SetDatos As New DataSet
If Not Conexion Is Nothing Then
If Conexion.State = 1 Then
Conexion.ChangeDatabase(vBase)
Return True
ElseIf Conexion.State = ConnectionState.Closed Then
Conexion.Open()
Conexion.ChangeDatabase(vBase)
Try
Sentencias = New MySqlCommand("SET SESSION SQL_BIG_SELECTS=1;", Conexion)
Sentencias.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show("El servidor responde: " & vbCrLf & ex.Message, "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return True
Else
Return False
End If
Else
Try
strCx = "Database=" & vBase & ";Data Source=" & vServer & ";User Id=" & vUser & ";Password=" & vPwd & ";Port=" & oPort.ToString & ";CharSet=utf8;Pooling=false;"
Conexion = New MySqlConnection(strCx)
Conexion.Open()
sSQL = "SHOW PROCESSLIST;"
Adapter = New MySqlDataAdapter(sSQL, Conexion)
Adapter.Fill(SetDatos, "LISTAPROCESOS")
If SetDatos.Tables("LISTAPROCESOS").Select("USER = '" & vUser & "'").Length > 1 Then
MessageBox.Show("No se puede realizar la conexión." & vbNewLine & "El usuario " & vUser & " está conectado desde otro puesto.", "Error: ADMINISTRADOR ACTIVO", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
Return True
Catch ex As MySqlException
If Not Directory.Exists(System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MySQL\MySQL Server 5.0\data\fulmar") Then
MessageBox.Show("La base de datos no existe o ha sido eliminada." & vbCrLf & "Se reiniciará para cargar el formulario de creación." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de falla mayor", MessageBoxButtons.OK, MessageBoxIcon.Error)
nuevoLogin.RegServer.Ip = ""
Process.Start(Application.ExecutablePath)
End
End If
Select Case ex.Number
Case 0
MessageBox.Show("El servidor no responde." & vbCrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1226
MessageBox.Show("El usuario ingresado ya se encuentra logueado en otro puesto.", "Error de login duplicado", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Case 1040
MessageBox.Show("Demasiadas conexiones activas." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de saturación de server", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1044
MessageBox.Show("Usuario sin privilegios para el servidor." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de privilegios", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1045
MessageBox.Show("El nombre de usuario o la clave son incorrectas." & vbCrLf & "Vuelva a ingresarlas", "Error delogin", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1049
MessageBox.Show("La base de datos no existe." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de falla mayor", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case Else
MessageBox.Show("Es posible que la base de datos haya sido eliminada.", "Error de falla mayor", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Select
Return False
End Try
Return True
End If
End Function
Crear y ejecutar una sentencia cargada en una variable:
Código vb.net:
Ver originalsSQL = "DROP TABLE IF EXISTS GEOCODE;"
' --------------------------------------------------------------------------------
Sentencias = New MySqlCommand(sSQL, conexion)
Sentencias.ExecuteNonQuery()
Crea y ejecutar una lectura de una tabla a un datatable:
Código vb.net:
Ver originalsSQL = "SELECT * FROM CATEGORIAS;"
Sentencias = New MySqlCommand(sSQL, conexion)
Adapter = New MySqlDataAdapter(Sentencias)
Adapter.Fill(oTabla)
Crea y ejecutar una lectura de un valor a una variable integer:
Código vb.net:
Ver originalsSQL = "SELECT LAST_INSERT_ID();"
' --------------------------------------------------------------------------------
Sentencias = New MySqlCommand(sSQL, conexion)
oId = Convert.ToInt32(Sentencias.ExecuteScalar)
Espero que te sirvan