Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 530

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 611

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 728

Strict Standards: Redefining already defined constructor for class wpdb in /home/controlz/public_html/blog/wp-includes/wp-db.php on line 306

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/cache.php on line 103

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /home/controlz/public_html/blog/wp-includes/cache.php on line 425

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/theme.php on line 623

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /home/controlz/public_html/blog/wp-includes/class.wp-dependencies.php on line 15

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/controlz/public_html/blog/wp-settings.php:472) in /home/controlz/public_html/blog/wp-content/plugins/si-captcha-for-wordpress/si-captcha.php on line 31

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/controlz/public_html/blog/wp-settings.php:472) in /home/controlz/public_html/blog/wp-content/plugins/si-captcha-for-wordpress/si-captcha.php on line 31

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method GoogleSitemapGeneratorLoader::Enable() should not be called statically in /home/controlz/public_html/blog/wp-includes/plugin.php on line 311
Conexion A Mysql | formatic.cat

Entradas con la etiqueta ‘conexion a mysql’

Visual Basic .NET con MySql

Viernes, 3 de Julio de 2009

Clase conexión MySql

Hace un tiempo hice una nueva clase para conectar con mysql, realizar select, delete, update… en fin, todo lo que se puede necesitar para conectar un programa VB.NET con Mysql.

Imports MySql.Data.MySqlClient ‘llamo a la referencia agregada en (Proyecto->Agregar referencia->Examinar->MySql.Data.dll)

”’ <summary>
”’ Establece una conexión con un servidor del tipo MySql
”’ </summary>
”’ <remarks></remarks>
Public Class ConexionMySql
Private conexion As MySqlConnection ‘gestiona la conexion a la Base de Datos

Private db As String ‘guardaremos el nombre de la BBDD que servira para el método ultimo_id

”’ <summary>
”’ Parámetros de inicialización
”’ </summary>
”’ <param name=”server”>Dirección del servidor(pj. “localhost”)</param>
”’ <param name=”user”>Usuario (pj. “mi_usuario”)</param>
”’ <param name=”pass”>Contraseña (pj. “mi_contraseña”)</param>
”’ <param name=”db”>Base de datos (pj. “mi_base_datos”)</param>
”’ <remarks></remarks>
Public Sub New(ByVal server As String, ByVal user As String, ByVal pass As String, ByVal db As String)
Me.conexion = New MySqlConnection()
conexion.ConnectionString = “server=” & server & “;” & “user id=” & user & “;” & “password=” & pass & “;” & “database=” & db
Try
conexion.Open()
‘MessageBox.Show(”Conexión Abierta Con Éxito”)
Catch mierror As MySqlException
MessageBox.Show(”Error de Conexión a la Base de Datos: ” & mierror.Message)
Finally
‘conexion.Dispose()
End Try
Me.db = db
End Sub

”’ <summary>
”’ Realiza una consulta a la base de datos y devuelve un DataReader
”’ </summary>
”’ <param name=”sentenciaSql”>Sentencia SELECT a realizar</param>
”’ <returns>MySqlDataReader</returns>
”’ <remarks></remarks>
Public Function consulta(ByVal sentenciaSql As String) As MySqlDataReader
Dim lectura As MySqlDataReader
lectura = montadorSentencia(sentenciaSql).ExecuteReader() ‘ le digo a la variable lectora que lo que tiene que recojer es la ejecucion de la variable comandos
Return lectura ‘retorno una variable del tipo MysqlDataReader
End Function

”’ <summary>
”’ Realiza sentencias del tipo UPDATE o DELETE
”’ </summary>
”’ <param name=”sentenciaSql”>Sentencia INSERT, UPDATE o DELETE a realizar</param>
”’ <returns>Integer</returns>
”’ <remarks></remarks>
Public Function manipuladorDatos(ByVal sentenciaSql As String) As Integer
Dim a As Integer = montadorSentencia(sentenciaSql).ExecuteNonQuery() ‘ le digo a la variable lectora que lo que tiene que recojer es la ejecucion de la variable comandos
Return a
End Function

‘Método privado que monta la sentencia en la variable del tipo Command
Private Function montadorSentencia(ByVal sentenciaSql As String) As MySqlCommand
Dim comandos As New MySqlCommand()
comandos.CommandText = sentenciaSql
comandos.CommandType = CommandType.Text
comandos.Connection = conexion

Return comandos
End Function

”’ <summary>
”’ Para poder saber el ultimo ID auto incremental insertado en una tabla
”’ </summary>
”’ <param name=”tabla”>Tabla a saber el ultimo ID</param>
”’ <returns>Integer con el ID</returns>
”’ <remarks></remarks>
Public Function ultimo_id(ByVal tabla As String) As Integer
Dim ultimoId As Integer
Dim lectura As MySqlDataReader

lectura = Me.consulta(”select auto_increment from information_schema.tables where TABLE_SCHEMA=’” & Me.db & “‘ and TABLE_NAME=’” & tabla & “‘”)

While lectura.Read()
ultimoId = lectura.GetString(”auto_increment”) - 1
Exit While
End While

lectura = Nothing

Return ultimoId
End Function

”’ <summary>
”’ Cierra la conexión con la base de datos
”’ </summary>
”’ <remarks></remarks>
Public Sub cerrarConexion()
Me.conexion.Close()
End Sub

End Class

¿Como utilizar la clase?

Aquí unos ejemplillos:

INSERT, UPDATE y DELETE: el método manipularDatos unicamente lanza una consulta contra la base de datos, sin esperar recibir datos de filas como devolveria una select.

Dim cnx As ConexionMySql ‘variable conexion
cnx = New ConexionMySql(server, user, pass, bbdd)

cnx.manipuladorDatos(”INSERT INTO partida(nombre,jugadorBlanco,jugadorNegro,fecha) VALUES(’” & txtNombre.Text & _
“‘,’” & txtJugadorBlanco.Text & “‘,’” & txtJugadorNegro.Text & “‘,’” & txtFecha.Text & “‘)”)

Dim idPartida As Integer = cnx.ultimo_id(”partida”) ‘recupero el id de partida recien insertado

‘cerrar conexion con mysql
cnx.cerrarConexion()

——-

cnx = New ConexionMySql(server, user, pass, bbdd)
cnx.manipuladorDatos(”delete from partida where idPartida=” & arrayCadena(0))
cnx.cerrarConexion()

SELECT

Dim cnx As ConexionMySql ‘objeto

cnx = New ConexionMySql(server, user, pass, bbdd)
Dim lect As MySqlDataReader ‘variable lectora
lect = cnx.consulta(”select * from partida where 1″)
While lect.Read <> False
ListBox1.Items.Add(lect.GetString(”idPartida”) & “_” & lect.GetString(”nombre”) & “_” & lect.GetString(”jugadorBlanco”) _
& “_” & lect.GetString(”jugadorNegro”) & “_” & lect.GetString(”fecha”))
End While
cnx.cerrarConexion()

Sólo hay un apunte a resaltar en la utilización del método manipularDatos(). Y es que si vas a lanzar mas de una operacion de manipularDatos seguida, siempre hay que cerrar la conexión con cnx.cerrarConexion() y volver a instanciar el objeto para poder volver a llamar al manipularDatos(), si no el conector de mysql se vuelve loco y lanza una excepción extraña. Si sabeis la solucion para que sin cerrar se puedan lanzar dos manipularDatos() seguidos avisad!

Ésta nueva clase permite hacer todas las sentencias, la única cosa a tener en cuenta es que las selects van por el método consulta, y todo lo demás que no retorna mas que si ha ido bien o mal, van por el método manipuladorDatos.

Incluye un método que te retorna el ultimo id asignado a una tabla.

Si no se quisiera poder conectar con multiples usuarios en cada instanciación, solo habria que quitar los parametros del constructor, y establecerlos a mano en la sentencia de conexión.

La he dejado bastante abierta a cambios, espero que os sirva de ayuda!

Os dejo aquí la descarga de la DLL: http://www.megaupload.com/?d=50P5FXVZ

Cualquier cosa comentar!