Archivo de la categoría ‘Visual Basic 2005 .NET’

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!

GDI+, Gráficos en Visual Basic 2005 .NET

Miércoles, 1 de Octubre de 2008

GDI + es la forma de dibujar formas, fuentes, imágenes o cualquier tipo de gráficos en general, en Visual Basic NET.

Primero vamos a crear un nuevo Panel. Ya sabéis, en modo diseño:

 Cuadro de Herramientas->Contenedores->Panel.

También haremos doble click sobre el nuevo Panel creado para que nos haga una declaracion del procedimiento que vamos a utilizar. Que será este:

Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

‘aquí el código

End Sub

Bien, lo primero que nos toca hacer es crear las variables que nos permitan ‘dibujar’ en el Panel, vamos a utilizar Graphics, Pen y Point.

Dim grafico As Graphics = e.Graphics
Dim p1 As Point
Dim p2 As Point
Dim punta As Pen

Para dibujar una linea en un plano, Visual Basic 2005 .NET necesita saber donde empieza, donde acaba, y como dibujarla.
Eso lo conseguimos con las variables del tipo Point y Pen.Ahora que ya sabemos esto, vamos a inicializar dichas variables: 

 

punta = New Pen(Color.Aqua,1) ‘un ‘lapiz’ del color Aqua
p1 = New Point(0, 1) ‘Point(x,y)
p2 = New Point(10, 11) ‘Point(x,y)

 Al lado, en comentario, he puesto lo que seria el contructor necesario. En los Point no hay mucho misterio, se crean dos puntos, P1(inicio) y P2(final), en un plano, que sera la traza que hara la linea, y se inicializa la variable punta con un Pen del tipo Aqua, que sera azul cian de 1 pixel de grosor.

 Con todo esto solo nos quedaria trazar la linea sobre el Panel.

grafico.DrawLine(punta, p1, p2) ‘ drawline(Pens.Azure,x1,y1,x2,y2)

 

grafico.DrawLine(punta, p1, p2) ‘ drawline(Pens.Azure,x1,y1,x2,y2)

 

Grafico es la variable que hemos declarado e igualado a e.Graphics, recordad que la variable ‘e’ viene siendo algo asi como las propiedades del Panel.
Sobre la clase Graphics hay una serie de métodos para dibujar, en este caso una línea, a la cual le pasamos las variables que antes he comentado, la variable ‘punta’ que contiene el grosor y tipo de pincel, y los puntos p1 y p2, inicio y fin de la linea. En comentarios teneis la declaracion sin tanta variable de por medio, los dos metodos son buenos.