none
Extraer Datos usando vb.NET y MySql

    Question

  • Hola a todos necesito ayuda, estoy desarrollando una aplicación en vb.net y visual studio 2008 y estoy usando la DLL mysql con la base de datos mysql y tengo problemas al crear consultas para extraer datos de él, hasta ahora me esta dando problemas esta:

    Imports MySql
        Public Function BuscarTelefono(ByVal pTelefono As String) As Boolean
            Connect () "conecta perfectamente a la base de datos confirmó en un método de datos para insertar el código de enlace se encuentra en un sub
            Dim sql As MySQLCommand = New MySQLCommand
            'Establecemos el tipo Connection que usará para realizar la petición
            sql.Connection = DBCon
            'Escribimos la consulta que deseamos en T-SQL. Nuestro ejemplo buscará todos
            'los nombres cuya segunda letra sea 'a' y penúltima 'e'
            sql.CommandText = "SELECT telefono FROM `cliente` WHERE `telefono` = '" & pTelefono & "';"
            'Como el comando no es almacenado ni vinculado a un tabla elegimos el tipo .Text
            sql.CommandType = CommandType.Text

            'Creamos un lector de datos (IDataReader) y lo inicializamos
            'con el lector del objeto MySQLCommand
            Dim dr As System.Data.IDataReader
            dr = sql.ExecuteReader()
            'Mientras haya datos para leer los mostramos
       

            While dr.Read()
                'Al igual de los objetos DataRow, la clase IDataReader también tiene
                'un método por defecto .Item que funciona exactamente igual
                If Not dr("telefono") Is Nothing Then
                    Return True
                Else
                    Return False
                End If
            End While

            'Cerramos la conexión con el servidor
            DBCon.Close()
        End Function

    ¿Cómo podría modificar esta función  para que devuelva un dataset con todos los datos que se encuentren o cumplan con el select?
    O como podria ser una funcion para extraer datos de la base de datos?
    Wednesday, April 20, 2011 12:57 PM

Answers

  • pero es que tiens una mezcla de libtrerias increible, de donde ha salido MySQLDriverCS ?

    porque segun veo por el error tienes definida la conexion con este

    cuando deberias usar el

    MySqlConnectio que aporta MySql.Data

     

    o sea en esta linea 

    Dim DBCon As MySQLConnection

    el objeto de conexion deberia provenir de MySql.Data

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Nico.uy Thursday, April 21, 2011 2:46 AM
    • Unmarked as answer by Nico.uy Thursday, April 21, 2011 2:47 AM
    • Marked as answer by Nico.uy Thursday, April 21, 2011 2:47 AM
    Thursday, April 21, 2011 2:10 AM

All replies

  • hola

    primer punto, elimina las comillas simp,es de la consulta

    podria ser algo como esto

     

    Public Function BuscarTelefono(ByVal pTelefono As String) As DataTable
        Connect ()

        Dim query As String = "SELECT telefono FROM cliente WHERE telefono = ?tel;"

        Dim cmd As New MySQLCommand(query, DBCon)
        cmd.Parameters.AddWithValue("?tel", pTelefono)

        Dim dt As DataTable
        Dim da As New MySqlDataAdapter(cmd)
        da.Fill(dt)

        Return dt
           
    End Function

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, April 20, 2011 1:12 PM
  • hola

    primer punto, elimina las comillas simp,es de la consulta

    podria ser algo como esto

     

    Public Function BuscarTelefono(ByVal pTelefono As String) As DataTable
        Connect ()

        Dim query As String = "SELECT telefono FROM cliente WHERE telefono = ?tel;"

        Dim cmd As New MySQLCommand(query, DBCon)
        cmd.Parameters.AddWithValue("?tel", pTelefono)

        Dim dt As DataTable
        Dim da As New MySqlDataAdapter(cmd)
        da.Fill(dt)

        Return dt
           
    End Function

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    no entiendo esta parte ?tel;"
    Wednesday, April 20, 2011 1:19 PM
  • con este defini un parametro en la consulta

    o sea para pasar informacion no se debe concatener el string, sino que se pasa la info por parametro

    por eso veras la linea

    cmd.Parameters.AddWithValue("?tel", pTelefono)

    de esta forma asignaas el valorque sera enviado en la consulta

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, April 20, 2011 1:29 PM
  • HOLA, el ?tel, es como si fuera el @ en SQL SERVER.

     

    SQL SERVER:

    SELECT telefono FROM cliente WHERE telefono = @TELEFONO

     

    MYSQL:

    SELECT telefono FROM cliente WHERE telefono = ?telefono

     

    Saludos.


    Programador .NET - Desarrollador 5 Estrellas.
    Wednesday, April 20, 2011 2:54 PM
  • hola

    primer punto, elimina las comillas simp,es de la consulta

    podria ser algo como esto

     

    Public Function BuscarTelefono(ByVal pTelefono As String) As DataTable
        Connect ()

        Dim query As String = "SELECT telefono FROM cliente WHERE telefono = ?tel;"

        Dim cmd As New MySQLCommand(query, DBCon)
        cmd.Parameters.AddWithValue("?tel", pTelefono)

        Dim dt As DataTable
        Dim da As New MySqlDataAdapter(cmd)
        da.Fill(dt)

        Return dt
           
    End Function

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    http://img695.imageshack.us/i/sinttulord.jpg/
    Estoy usando MySQL Connector Net 1.0.10


    Wednesday, April 20, 2011 4:15 PM
  • hola

    porque no actualizas el conector a una version mas nueva ?

    Connector/Net 6.3.6

    este si soporta el AddWithValue()

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, April 20, 2011 4:29 PM
  • hola

    porque no actualizas el conector a una version mas nueva ?

    Connector/Net 6.3.6

    este si soporta el AddWithValue()

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Instale e importe la dll  MySQL.VisualStudio.dll pero me sigue dando error en esa parte tambien probe hacer un cambio en    cmd.Parameters.Add("?telefono", pTelefono) pero me da un error en el fill, me dice que el dataadapter viene vacio
    Wednesday, April 20, 2011 4:51 PM
  • Imports MySQLDriverCS
    Imports MySql
    Imports Cliente

    Public Class Mostrar
        Dim DBCon As MySQLConnection

        Public Sub Conectar()
            'La variable bConexionExitosa nos permitirá finalizar el
            'programa si la conexión falla
            Dim bConexionExitosa As Boolean = True

            'Creamos un objeto de tipo Connection y configuramos los parámetros de la conexión

            'Los parámetros de la sobrecarga con más parámetros son:
            '1. Dirección IP o nombre de la máquina con el servidor de MySQLS
            '2. Nombre de la base de datos
            '3. Nombre de usuario con acceso a la base de datos señalada anteriormente
            '4. Contraseña para el nombre de usuario citado
            '5. Puerto por el que se acede al servidor. Típicamente 3306
            DBCon = New MySQLConnection(New MySQLConnectionString("IPmiServidor", "basedatos", "usuario", "micalve", 3306).AsString)
            Try
                'Abrimos la conexión y comprobamos que no hay error
                DBCon.Open()
            Catch ex As MySQLException
                'Si hubiese error en la conexión mostramos el texto de la descripción
                MsgBox(ex.Message.ToString)
                MsgBox("Hubo un problema de conexción y no se pudo ingresar el nuevo cliente, favor intentar en unos minutos", MsgBoxStyle.Critical, "Operación Fallida")
                bConexionExitosa = False
            End Try
        End Sub

     

    así es mi clase de conexion

    Wednesday, April 20, 2011 4:53 PM
  • ehh pero esa no es la dll que debes referenciar

     

    tendria que ser una de MySql.Data.dll

    imagen

    es mas debes agregar el Imports a esta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, April 20, 2011 4:55 PM

  • ehh pero esa no es la dll que debes referenciar

     

    tendria que ser una de MySql.Data.dll

    imagen

    es mas debes agregar el Imports a esta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Ya descargue e importe esa DLL y me esta dando un error en el data adapter ahora me dice que esta vacio
    http://img825.imageshack.us/i/sinttulosyy.jpg/
    Thursday, April 21, 2011 12:21 AM
  • este ejemplo me devuelve true si el nro ingresado existe y false si no y hoy por hoy me esta funcionanado
     Conectar()
            'Instanciamos un objeto de la clase MySQLCommand utilizando el constructor por defecto
            Dim sql As MySQLCommand = New MySQLCommand
            'Establecemos el tipo Connection que usará para realizar la petición
            sql.Connection = DBCon
            'Escribimos la consulta que deseamos en T-SQL. Nuestro ejemplo buscará todos
            'los nombres cuya segunda letra sea 'a' y penúltima 'e'
            sql.CommandText = "SELECT telefono FROM `cliente` WHERE `telefono` = '" & pTelefono & "';"
            'Como el comando no es almacenado ni vinculado a un tabla elegimos el tipo .Text
            sql.CommandType = CommandType.Text

            'Creamos un lector de datos (IDataReader) y lo inicializamos
            'con el lector del objeto MySQLCommand
            Dim dr As System.Data.IDataReader
            dr = sql.ExecuteReader()
            'Mientras haya datos para leer los mostramos



            While dr.Read()
                'Al igual de los objetos DataRow, la clase IDataReader también tiene
                'un método por defecto .Item que funciona exactamente igual
                If Not dr("telefono") Is Nothing Then
                    Return True
                Else
                    Return False
                End If
            End While

            'Cerramos la conexión con el servidor
            DBCon.Close()
    Thursday, April 21, 2011 12:28 AM
  • esta otra me trae todos los datos pero no le puedo aplicar filtro (va no se como hacerlo)

     

        Public Sub Veo_Todo()
            Conectar()
            'Definimos dos arrays de String, f y t, que contendrán, respectivamente, los
            'campos (fields) que la consulta devolverá y la tablas sobre las que se ejecutará.
            'Las cláusulas WHERE y ORDER BY no las utilizaremos, de ahí los Nothing
            Dim f() As String = {"telefono", "nombre"}
            Dim t() As String = {"cliente"}
            'Ejecutamos la consulta mediante el comando MySQLSelectCommand
            Dim dt As DataTable = New MySQLSelectCommand(DBCon, f, t, Nothing, Nothing, Nothing).Table
            'Si la consulta produjo algún resultado los mostraremos mediante un MsgBox
            'La clase DataTable contiene una colección accesible mediante .Rows
            'en la que se almacenan los resultados como variables DataRow
            If (dt.Rows.Count <> 0) Then
                'Creamos una variable DataRow para contener los elementos resultantes
                Dim drow As DataRow
                'Al tratarse de una colección podemos recorrerla mediante For Each...In
                For Each drow In dt.Rows
                    'DataRow tiene un método por defecto llamado .Item(...) que permite
                    'devolver el elemento indicado por el índice o el nombre de la columna
                    MsgBox(drow("nombre") & " " & drow("telefono"))
                Next
                'Cerramos la conexión con el servidor
                DBCon.Close()
            End If
        End Sub

    Thursday, April 21, 2011 12:42 AM
  • segun veo no estas usando

    Dim dt As New DataTable

    o sea faltaba el New

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, April 21, 2011 12:47 AM
  • segun veo no estas usando

    Dim dt As New DataTable

    o sea faltaba el New

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

      Conectar()

            Dim query As String = "SELECT telefono FROM cliente WHERE telefono = ?telefono;"

            Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(query)
            cmd.Parameters.AddWithValue("?telefono", pTelefono)

            Dim dt As New DataTable
            Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
            da.Fill(dt)  >>>>>> Fill: la propiedad SelectCommand.Connection no se ha inicializado. <<<<<<<<<<< ERROR

            Return dt

            'Cerramos la conexión con el servidor
            DBCon.Close()



    Thursday, April 21, 2011 12:59 AM
  • Esta es TODA la clase

    Imports MySQLDriverCS

    Imports Cliente

    Imports MySql.Data

     

    Public Class Mostrar

        Dim DBCon As MySQLConnection

     

        Public Sub Conectar()

            'La variable bConexionExitosa nos permitirá finalizar el

            'programa si la conexión falla

            Dim bConexionExitosa As Boolean = True

     

            'Creamos un objeto de tipo Connection y configuramos los parámetros de la conexión

     

            'Los parámetros de la sobrecarga con más parámetros son:

            '1. Dirección IP o nombre de la máquina con el servidor de MySQLS

            '2. Nombre de la base de datos

            '3. Nombre de usuario con acceso a la base de datos señalada anteriormente

            '4. Contraseña para el nombre de usuario citado

            '5. Puerto por el que se acede al servidor. Típicamente 3306

            DBCon = New MySQLConnection(New MySQLConnectionString("xx.xxx.xxx.xxx", "mitabla", "miuseradmin", "miclave", 3306).AsString)

            Try

                'Abrimos la conexión y comprobamos que no hay error

                DBCon.Open()

            Catch ex As MySQLException

                'Si hubiese error en la conexión mostramos el texto de la descripción

                MsgBox(ex.Message.ToString)

                MsgBox("Hubo un problema de conexción y no se pudo ingresar el nuevo cliente, favor intentar en unos minutos", MsgBoxStyle.Critical, "Operación Fallida")

                bConexionExitosa = False

            End Try

        End Sub

     

        Public Sub Veo_Todo(ByVal pTel As String)

            Conectar()

            'Definimos dos arrays de String, f y t, que contendrán, respectivamente, los

            'campos (fields) que la consulta devolverá y la tablas sobre las que se ejecutará.

            'Las cláusulas WHERE y ORDER BY no las utilizaremos, de ahí los Nothing

            Dim f() As String = {"*"}

            Dim t() As String = {"cliente"}

            Dim w() As String = {pTel}

            Dim o() As String = {pTel}

            'Ejecutamos la consulta mediante el comando MySQLSelectCommand

            Dim dt As DataTable = New MySQLSelectCommand(DBCon, f, t, Nothing, Nothing, Nothing).Table

            'Si la consulta produjo algún resultado los mostraremos mediante un MsgBox

            'La clase DataTable contiene una colección accesible mediante .Rows

            'en la que se almacenan los resultados como variables DataRow

            If (dt.Rows.Count <> 0) Then

                'Creamos una variable DataRow para contener los elementos resultantes

                Dim drow As DataRow

                'Al tratarse de una colección podemos recorrerla mediante For Each...In

                For Each drow In dt.Rows

                    'DataRow tiene un método por defecto llamado .Item(...) que permite

                    'devolver el elemento indicado por el índice o el nombre de la columna

                    MsgBox(drow("nombre") & " " & drow("telefono"))

                Next

                'Cerramos la conexión con el servidor

                DBCon.Close()

            End If

        End Sub

     

     

        Public Function BuscarTelefono(ByVal pTelefono As String) As datatable

    Conectar()

     

            Dim query As String = "SELECT telefono FROM cliente WHERE telefono = ?telefono;"

     

            Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(query, DBCon)

            cmd.Parameters.AddWithValue("?telefono", pTelefono)

     

            Dim dt As New DataTable

            Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)

            da.Fill(dt)

     

            Return dt

     

            'Cerramos la conexión con el servidor

            DBCon.Close()

        End Function

     

     

    End Class

    Thursday, April 21, 2011 1:10 AM
  • no has termindo de definri bien el codigo

    en este lines

    Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(query)

    no defines la conexion a la db

    compara tu codigo con el ejemplo que he puesto y vera que uso

    Dim cmd As New MySQLCommand(query, DBCon)

    o sea alli defines el objeto connection que se usara

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, April 21, 2011 1:16 AM
  • no has termindo de definri bien el codigo

    en este lines

    Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(query)

    no defines la conexion a la db

    compara tu codigo con el ejemplo que he puesto y vera que uso

    Dim cmd As New MySQLCommand(query, DBCon)

    o sea alli defines el objeto connection que se usara

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    si hago eso me da error, me parece que las dll    MySQLDriverCS y MySql.data  me están dando conflicto, tu como haces la conexion a la base de datos usando la mysql.data?
       Value of type 'MySQLDriverCS.MySQLConnection' cannot be converted to 'MySql.Data.MySqlClient.MySqlConnection'.    C:\Users\wico\Desktop\Duende\COD\Mostrar.vb    147    67    COD

    Thursday, April 21, 2011 1:52 AM
  • pero es que tiens una mezcla de libtrerias increible, de donde ha salido MySQLDriverCS ?

    porque segun veo por el error tienes definida la conexion con este

    cuando deberias usar el

    MySqlConnectio que aporta MySql.Data

     

    o sea en esta linea 

    Dim DBCon As MySQLConnection

    el objeto de conexion deberia provenir de MySql.Data

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Nico.uy Thursday, April 21, 2011 2:46 AM
    • Unmarked as answer by Nico.uy Thursday, April 21, 2011 2:47 AM
    • Marked as answer by Nico.uy Thursday, April 21, 2011 2:47 AM
    Thursday, April 21, 2011 2:10 AM
  • Perfecto MUCHAS GRACIAS!!!!
    Thursday, April 21, 2011 2:47 AM