Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/06/2010, 13:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: [Ayuda] Vb 2010 Mysql

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 original
  1. Imports MySql.Data.MySqlClient
  2. Imports MySql.Data.Types
Variables:
Código vb.net:
Ver original
  1. Private Conexion As MySqlConnection
  2. Private Reader As MySqlDataReader
  3. Private Adapter As MySqlDataAdapter
  4. Private Sentencias As MySqlCommand
  5. Private Trans As MySqlTransaction
  6. Private strCx As String
  7. 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
  1. ' CONECTAR a la base de datos con parámetros.
  2.     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
  3.         Dim strCx As String
  4.         Dim SetDatos As New DataSet
  5.         If Not Conexion Is Nothing Then
  6.             If Conexion.State = 1 Then
  7.                 Conexion.ChangeDatabase(vBase)
  8.                 Return True
  9.             ElseIf Conexion.State = ConnectionState.Closed Then
  10.                 Conexion.Open()
  11.                 Conexion.ChangeDatabase(vBase)
  12.                 Try
  13.                     Sentencias = New MySqlCommand("SET SESSION SQL_BIG_SELECTS=1;", Conexion)
  14.                     Sentencias.ExecuteNonQuery()
  15.                 Catch ex As Exception
  16.                     MessageBox.Show("El servidor responde: " & vbCrLf & ex.Message, "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  17.                 End Try
  18.                 Return True
  19.             Else
  20.                 Return False
  21.             End If
  22.         Else
  23.             Try
  24.                 strCx = "Database=" & vBase & ";Data Source=" & vServer & ";User Id=" & vUser & ";Password=" & vPwd & ";Port=" & oPort.ToString & ";CharSet=utf8;Pooling=false;"
  25.                 Conexion = New MySqlConnection(strCx)
  26.                 Conexion.Open()
  27.                 sSQL = "SHOW PROCESSLIST;"
  28.                 Adapter = New MySqlDataAdapter(sSQL, Conexion)
  29.                 Adapter.Fill(SetDatos, "LISTAPROCESOS")
  30.                 If SetDatos.Tables("LISTAPROCESOS").Select("USER = '" & vUser & "'").Length > 1 Then
  31.                     Conexion.Close()
  32.                     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)
  33.                     Return False
  34.                 End If
  35.                 Return True
  36.             Catch ex As MySqlException
  37.                 If Not Directory.Exists(System.Environment.GetEnvironmentVariable("ProgramFiles") & "\MySQL\MySQL Server 5.0\data\fulmar") Then
  38.                     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)
  39.                     nuevoLogin.RegServer.Ip = ""
  40.                     Process.Start(Application.ExecutablePath)
  41.                     End
  42.                 End If
  43.                 Select Case ex.Number
  44.                     Case 0
  45.                         MessageBox.Show("El servidor no responde." & vbCrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  46.                     Case 1226
  47.                         MessageBox.Show("El usuario ingresado ya se encuentra logueado en otro puesto.", "Error de login duplicado", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  48.                     Case 1040
  49.                         MessageBox.Show("Demasiadas conexiones activas." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de saturación de server", MessageBoxButtons.OK, MessageBoxIcon.Error)
  50.                     Case 1044
  51.                         MessageBox.Show("Usuario sin privilegios para el servidor." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de privilegios", MessageBoxButtons.OK, MessageBoxIcon.Error)
  52.                     Case 1045
  53.                         MessageBox.Show("El nombre de usuario o la clave son incorrectas." & vbCrLf & "Vuelva a ingresarlas", "Error delogin", MessageBoxButtons.OK, MessageBoxIcon.Error)
  54.                     Case 1049
  55.                         MessageBox.Show("La base de datos no existe." & vbCrLf & "Notifique al Administrador del Gestor.", "Error de falla mayor", MessageBoxButtons.OK, MessageBoxIcon.Error)
  56.                     Case Else
  57.                         MessageBox.Show("Es posible que la base de datos haya sido eliminada.", "Error de falla mayor", MessageBoxButtons.OK, MessageBoxIcon.Error)
  58.                 End Select
  59.                 Return False
  60.             End Try
  61.             Return True
  62.         End If
  63.     End Function

Crear y ejecutar una sentencia cargada en una variable:
Código vb.net:
Ver original
  1. sSQL = "DROP TABLE IF EXISTS GEOCODE;"
  2. ' --------------------------------------------------------------------------------
  3. Sentencias = New MySqlCommand(sSQL, conexion)
  4. Sentencias.ExecuteNonQuery()

Crea y ejecutar una lectura de una tabla a un datatable:
Código vb.net:
Ver original
  1. sSQL = "SELECT * FROM CATEGORIAS;"
  2. Sentencias = New MySqlCommand(sSQL, conexion)
  3. Adapter = New MySqlDataAdapter(Sentencias)
  4. Adapter.Fill(oTabla)
Crea y ejecutar una lectura de un valor a una variable integer:
Código vb.net:
Ver original
  1. sSQL = "SELECT LAST_INSERT_ID();"
  2. ' --------------------------------------------------------------------------------
  3. Sentencias = New MySqlCommand(sSQL, conexion)
  4. oId = Convert.ToInt32(Sentencias.ExecuteScalar)

Espero que te sirvan
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/06/2010 a las 16:32