Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/08/2009, 07:55
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Conectar mi base de datos mysql con visual 2008 .net

Cita:
voy a desintalar el wamp y luego instalo el mysql 5.0, en este caso como pongo la direccion donde esta mi bd, si solo tengo instaldo mysql.
En realidad no necesitas la dirección deonde está la base en sí, sino cuál es la dirección de host.
MySQL se instala como servicio de Windows; este servicio escucha los puertos del3306 al 3309, pr lo que simplemente enviando el pedido al puerto correcto será suficiente. De hecho, si el host que le indicas está en la web, el MySQl mismo intentará contactarlo allí.
En este punto lo importante es:
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. 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
  2.         Dim strCx As String
  3.         Dim SetDatos As New DataSet
  4.         If Not conexion Is Nothing Then
  5.             If conexion.State = 1 Then
  6.                 Return True
  7.             ElseIf conexion.State = ConnectionState.Closed Then
  8.                 conexion.Open()
  9.                 Try
  10.                     Sentencias = New MySqlCommand("SET SESSION SQL_BIG_SELECTS=1;", conexion)
  11.                     Sentencias.ExecuteNonQuery()
  12.                 Catch ex As Exception
  13.                     MessageBox.Show("El servidor responde: " & ControlChars.CrLf & ex.Message, "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  14.                 End Try
  15.                 Return True
  16.             Else
  17.                 Return False
  18.             End If
  19.         Else
  20.             Try
  21.                 strCx = "Database=" & vBase & ";Data Source=" & vServer & ";User Id=" & vUser & ";Password=" & vPwd & ";Port=" & oPort.ToString & ";CharSet=utf8;Pooling=false;"
  22.                 conexion = New MySqlConnection(strCx)
  23.                 conexion.Open()
  24.                 sSQL = "SHOW PROCESSLIST;"
  25.                 Adapter = New MySqlDataAdapter(sSQL, conexion)
  26.                 Adapter.Fill(SetDatos, "LISTAPROCESOS")
  27.                 If SetDatos.Tables("LISTAPROCESOS").Select("USER = '" & vUser & "'").Length > 1 Then
  28.                     conexion.Close()
  29.                     MessageBox.Show("No se puede realizar la conexión." & ControlChars.NewLine & "El usuario " & vUser & "está conectado desde otro puesto.", "Error: ADMINISTRADOR ACTIVO", MessageBoxButtons.OK, MessageBoxIcon.Error)
  30.                     Return False
  31.                 End If
  32.                 Return True
  33.             Catch ex As MySqlException
  34.                 Select Case ex.Number
  35.                     Case 0
  36.                         MessageBox.Show("El servidor no responde." & ControlChars.CrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  37.                     Case 1226
  38.                         MessageBox.Show("El usuario ingresado ya se encuentra logueado en otro puesto.", "Error de usuario en conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  39.                     Case 1040
  40.                         MessageBox.Show("Demasiadas conexiones activas." & ControlChars.CrLf & "Notifique al Administrador de la base.", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  41.                     Case 1044
  42.                         MessageBox.Show("Usuario sin privilegios para el servidos." & ControlChars.CrLf & "Notifique al Administrador de la base.", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  43.                     Case 1045
  44.                         MessageBox.Show("El nombre de usuario o la clave son incorrectas." & ControlChars.CrLf & "Vuelva a ingresarlas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  45.                     Case 1049
  46.                         MessageBox.Show("La base de datos no existe." & ControlChars.CrLf & "Notifique al Administrador del sistema.", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  47.                 End Select
  48.                 Return False
  49.             End Try
  50.             Return True
  51.         End If
  52.     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)