Autor Tema: Dataset VS IDataReader Vb.NET y MySQL (Problem)  (Leído 6201 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado spawnri

  • Sv Member
  • ***
  • Mensajes: 352
Dataset VS IDataReader Vb.NET y MySQL (Problem)
« : noviembre 23, 2006, 08:23:10 am »
Amigos.. con mi compañero de formula nos estamos metiendo en el mundo de MYSQL y .NET pero tenemos un problemita.

Queremos usar nuestros acostumbrados DATASET usando la conexion de MySQL pero nos da clavo... Y los ejemplos de IDataReader no nos parecen mucho pues queremos hacer que nuestro codigo sirva para multiples plataformas de Bases de Datos.

La pregunta aqui es: ¿MySQL no permite tener un estandar de uso para el DATASET de ado.NET? Si la respuesta es si.. Como logro eso?

Pongo aqui el codigo que queremos manejar y el codigo de lo que "El Guille" recomienda hacer.


CODIGO RECOMENDADO POR "EL GUILLE"
Código: [Seleccionar]
// SUPONGAMOS QUE LA CONEXION YA ESTA HECHA..(PORQUE ESO NO ES EL PROBLEMA)

 Dim sql As MySQLCommand = New MySQLCommand
            'Establecemos el tipo Connection que usará para realizar la petición
            sql.Connection = DBCon 'ESTA ES LA CONEXION A MYSQL
            '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 * FROM `prueba` WHERE `nombre` LIKE '_a%e_';"
            '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 'ESTA ES LA PARTE QUE NO ME GUSTA
            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
                MsgBox(dr("nombre"))
            End While



CODIGO QUE QUEREMOS UTILIZAR PARA CORRER NUESTROS SCRIPTS
Código: [Seleccionar]
    Private Function SQLRunWITHQuery(ByVal Script As String, ByVal Mensaje As String) As String
        '*********************
        dbDataSet = New Data.DataSet
        dbDataAdapter = New Data.SqlClient.SqlDataAdapter(Script, DBCon) 'AQUI ME DA CLAVO PORQUE NO ME ACEPTA LA CONEXION DE MYSQL
        Try
            dbDataAdapter.Fill(dbDataSet, NombreTabla)
        Catch ex As Exception
            If Agente(Mensaje, "Hubo el siguiente error: " & ex.Message, xErrores.Errores, 25) Then
            End If
            SQLRunWITHQuery = Nothing
            Exit Function
        End Try
        '********************
        SQLRunWITHQuery = Nothing
        If Agente("Proceso Concluido", Mensaje, xErrores.Notificacion, 25) Then
        End If


    End Function

"Todos los días la gente se arregla el cabello, ¿por qué no el corazón?."


Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Dataset VS IDataReader Vb.NET y MySQL (Problem)
« Respuesta #1 : noviembre 23, 2006, 09:17:50 am »
Mira no me recuerdo bien pero creo que la mejor manera de usar mysql en .net es que te tenes que conseguir el mysql connector, no vas a trabajar con las cosas de microsoft a menos que lo uses por ODBC

Si queres que sea multi funcional con base de datos defini una variable del tipo de base de datos que estas usando y que segun el tipo sea el cliente de conexion.

Pero si vas a trabajar con mysql lo mejor que podes hacer es usar el mysql connector que se descarga del sitio de mysql, si queres un poco de ejemplos te podes leer el sitio de vbmysql.com tiene unos ejemplos bastante funcionales.

Desconectado theoden

  • Sv Member
  • ***
  • Mensajes: 383
Re: Dataset VS IDataReader Vb.NET y MySQL (Problem)
« Respuesta #2 : noviembre 23, 2006, 08:33:49 pm »
Fijate que si se puede usar un dataset para conectarte a mysql yo lo hize esta semana  B-) , lo primero que tenes que hacer es bajarte el mysql connector par .Net de aqui

Código: [Seleccionar]
http://www.mysql.com/products/connector/net/
DEspues lo instalas y toda la onda y abris el proyecto con el que estas trabajando y le das en:

Proyecto-Agregar Referencia-Examinar ahora buscas la dll que por defecto esta en C:\Archivos de programa\MySql\Mysql Connector NET 1.0.8\Binaries

Aqui te van a salir dos carpetas .NET 1.1 y la .NET 2.0, si estas trabajando con el vs 2003 agrega el 1.1, si estas con el vs 2005 agrega el 2.0

al abrir esa carpeta esta la dll que tenes que agregar se llama MySql.Data.dll

ya agregaste la referencia al proyecto, ahora hay que importar las clases

pone esto al pricipio del codigo
Código: [Seleccionar]
Imports mysql.Data.MySqlClient
Imports mysql.Data.Common

vaya ahora he visto que en tu codigo la funcion que queres hacer estandar no tenes que declarar el adapter SqlDataAdapter porque ese es para sql server, el dataset si ya lo podes declarar como dataset normalito ese no varia.

la coneccion y el adapter los tenes que declarar de esta forma

Código: [Seleccionar]
Private WithEvents __cnx As MySqlConnection
 Public Adapter As MySqlDataAdapter
Private dbDataSet As New DataSet

Tambien podes declarar un commanbuilder si queres actualizar, agregar y eliminar datos desde el adapter asi
Código: [Seleccionar]
Public Shared Cmd As MySqlCommandBuilder

Ahora para abrir la conexion lo haces de la siguiente forma
Código: [Seleccionar]
Try
            __cnx = New MySqlConnection
            __cnx.ConnectionString = _
                          "Database=" & mDatabase & ";" & _
                          "Data Source=" & mServer & ";" & _
                          "Port=" & mPort & ";" & _
                          "User Id=" & mUser & ";" & _
                          "Password=" & mPass
            __cnx.Open()
        Catch MyEx As MySqlException
           msgbox(MyEx.message)
        End Try

tomando en cuenta que mDataBase, MServer y todas esas son variables va, a server le podes poner localhost, a port 3306 y a user root, la contraseña depende si le pusiste..

vaya ahora tu funcion quedaria algo asi
Código: [Seleccionar]
Private Function SQLRunWITHQuery(ByVal Script As String)
        '*********************
 Try
       dbDataSet = New MySqlDataAdapter(Script, __cnx)
       Cmd = New MySqlCommandBuilder(dbDataSet)
       dbDataAdapter.Fill(dbDataSet, NombreTabla)

        Catch ex As Exception
              msgbox(ex.message)
        End Try
        '********************

    End Function

yo te recomiendo que hagas el MySqlCommanBuilder tambien porque asi el solo hace las sentencias de update, delete y insert cuando la consulta es a una sola tabla y despues podes hacer estos cambios poniendo dataset.update(ds,tabla) igualito como en sql server..

Espero que me haya explicado bien porque lo he hecho de la forma mas ordenada que he podido para que me entendas y si he sido bastante especifico en los pasos es porque asi quisiera encontrar las cosas siempre  :D en vez de andar buscando en varios lados..

Si no me di enteder en algo preguntame, espero y te sirva.

Desconectado spawnri

  • Sv Member
  • ***
  • Mensajes: 352
Re: Dataset VS IDataReader Vb.NET y MySQL (Problem)
« Respuesta #3 : noviembre 27, 2006, 01:38:14 pm »
He probado el codigo y he realizado algunos ajuestes.. y corre de maravillas... asi que muchas gracias todos los que me ayudaron.  :drinks:
"Todos los días la gente se arregla el cabello, ¿por qué no el corazón?."


sicario

  • Visitante
Re: Dataset VS IDataReader Vb.NET y MySQL (Problem)
« Respuesta #4 : diciembre 04, 2006, 11:42:29 am »
He probado el codigo y he realizado algunos ajuestes.. y corre de maravillas... asi que muchas gracias todos los que me ayudaron.  :drinks:

Secundo el agradecimiento.. en realidad era algo que me urgia.. :drinks: