Foros del Web » Programación para mayores de 30 ;) » .NET »

Error: Consulta Mysql-VB.net 2008

Estas en el tema de Error: Consulta Mysql-VB.net 2008 en el foro de .NET en Foros del Web. --Hola que tal tengo un pequeño problemita a la hora de hacer una consulta, estoy utilizando Mysql con Vb.net 2008; el error es el siguiente:-- ...
  #1 (permalink)  
Antiguo 24/07/2009, 17:05
 
Fecha de Ingreso: julio-2008
Mensajes: 116
Antigüedad: 15 años, 9 meses
Puntos: 1
Error: Consulta Mysql-VB.net 2008

--Hola que tal tengo un pequeño problemita a la hora de hacer una consulta, estoy utilizando Mysql con Vb.net 2008; el error es el siguiente:--

Fatal error encountered during command execution.

--eso ocurre en el siguiente código, es lo único que me muestra de mensaje

Código:
        Dim cnn as New MySqlConnection
        Dim cmd As New MySqlCommand
        Dim da As New MySqlDataAdapter
        Dim ds As New DataSet
        cnn.ConnectionString = "Mi_cadena_de_conexion"
        Try
                cnn.Open()
                cmd.Connection = cnn
                cmd.CommandText = "Mi_Consulta"
                da.SelectCommand = cmd
                da.Fill(ds)
        Catch ex As MySqlException
                MessageBox.Show(ex.Message)
        End Try
El error mencionado anteriormente se produce en la linea que contiene
Código:
 da.Fill(ds)
De antemano gracias por su ayuda
PD. No estoy seguro pero creo que es cuando la consulta trae bastante información. Ya que en consulta con pocos registro no ocurre el error.

Última edición por Aioros-jms; 27/07/2009 a las 11:06
  #2 (permalink)  
Antiguo 24/07/2009, 19:58
Avatar de 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: Error: Consulta Mysql-VB.net 2008

Cita:
No estoy seguro pero creo que es cuando la consulta trae bastante información. Ya que en consulta con pocos registro no ocurre el error.
En ese caso sería buena idea saber en qué consiste la consulta, porque puede que el problema esté allí.
¿Por qué no preguntas en el Foro de MySQL, a ver si esa consulta es eficiente para lo que quieres? Tal vez el problema tenga que ver con la performance de la misma...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/07/2009, 08:21
 
Fecha de Ingreso: julio-2008
Mensajes: 116
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Error: Consulta Mysql-VB.net 2008

He probado la consulta en Mysql Query Browser, y no me indica ningun error y obtengo resultado.

saludos, gracias por responder!!!
  #4 (permalink)  
Antiguo 27/07/2009, 07:21
Avatar de 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: Error: Consulta Mysql-VB.net 2008

Cita:
He probado la consulta en Mysql Query Browser, y no me indica ningun error y obtengo resultado.
Vi que en el Foro de MySQL te borraron el post. Eso es porque lo que pusiste es una copia de este y no algo más específico y sin el código VB (no se puede poner código de programación no SQL en los foros de BBDD).
Por ello, vuelvo aquí para un par de tips:
Por un lado, el hecho de que puedas ejecutar la consulta en el MySQL Query Browser no implica que la consulta sea o no eficiente. El MQB es una aplicación propietaria y sus capacidades suelen estar por encima de las que usa VB.net al conectarse con MySQL. Para saber si es o no eficiente, deberías postear la sentencia SQL completa, e incluso tal vez el CREATE de las tablas usadas, a fin de saber si el uso es óptimo.
Por otro lado, sería bueno conocer cuántos registros procesó en el máximo de exigencia, usando la sentencia EXPLAIN en el MQB.
También sería bueno saber qué estás usando para conectarte a MySQL (ODBC, MySQL Connector.Net, etc), y cómo construyes el string de conexión.

En este punto, el problema puede tener varios orígenes:
- Exceso de tiempo de consulta o transacción excesivamente larga.
- Memoria insuficiente para tablas intermedias.
- TimeOut insuficiente de la conexión.
- Recursos del conector insuficientes o inadecuados para el uso.
- Versión demasiado vieja de MySQL (bugs no corregidos)

En principio, lo que habría que hacer es controlar las MysqlException, si usas el conector .Net de MySQL, o bien las Exception en la ejecución de la sentencia, para ver exactamente si MySQL está devolviendo un mensaje de error, o el error se está produciendo en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/07/2009, 10:49
 
Fecha de Ingreso: julio-2008
Mensajes: 116
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Error: Consulta Mysql-VB.net 2008

Hola buen día!!!

Muchas gracias por tus comentarios e interes gnzsoloyo, no me habia dado cuenta que me habia borrado el post, bueno a la otra pondré mas atención al postear un tema para que no me borren jejeje.

Bueno como ya lo habia menciaonado utilizo mysql 6 alpha con vb.net 2008, para conectarme utilizo el MySQL Connector Net 5.2.5, solo ocupo una tabla con unos 10 campos, esta se llena diariamente con aproximadamente 1,500,000 registro.

la tabla es de la siguiente manera:

Código:
DROP TABLE IF EXISTS `tblExample`;
CREATE TABLE `tblExample` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Campo` varchar(50) NOT NULL,
  `Campo2` varchar(10) NOT NULL,
  `Campo3` varchar(50) NOT NULL,
  `Campo4` varchar(10) NOT NULL,
  `Campo5` varchar(150) NOT NULL,
  `Campo6` date NOT NULL,
  `Campo7 time NOT NULL,
  `Campo8` varchar(20) NOT NULL,
  `Campo9` varchar(45) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Mi consulta sería algo así:

Código:
Dim cmd As New MySqlCommand
        Dim da As New MySqlDataAdapter
        Dim ds As New DataSet
        Dim MyQuery  As String = "SELECT  Campo5, COUNT(Campo5) AS 'Total' FROM MyDBs.tblExample where Campo6 >= '" & _fecha1 & "' and Campo6 <= '" & _fecha2 & "' and Campo9 In (" & _text & ") and Campo5 Like '%" & _val & "%' group by Campo5"
        cnn.ConnectionString = "Mi_cadena_de_conexion"
        Try
                cnn.Open()
                cmd.Connection = cnn
                cmd.CommandText = MyQuery
                da.SelectCommand = cmd
                da.Fill(ds)
        Catch ex As MySqlException
                MessageBox.Show(ex.Message)
        End Try

Saludos!! de ante mano gracias!!
  #6 (permalink)  
Antiguo 28/07/2009, 08:17
Avatar de 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: Error: Consulta Mysql-VB.net 2008

La sentencia que estás usando puede ser un problema, porque exige al motor de MySQL una búsqueda demasiado compleja, y por allí puede estar el problema. Es muy posible que haya un exceso de recursos usados y esto se perciba cuando se ejecuta a nivel local, ya que es tu propia PC la que se está usando para responder a la consulta.
Esta misma consulta, realizada contra un server de bases de datos (un buen fierro), no debería pestañear, pero, como dije, si los recursos de la PC no son buenos, puede haber problemas.
Supongo que en este foro debe haber una restricción parecida respecto a la de MySQL, pero aún así veamos:
Código SQL:
Ver original
  1. SELECT  
  2.     Campo5,
  3.     COUNT(Campo5) AS 'Total'
  4. FROM MyDBs.tblExample
  5. WHERE
  6.     Campo6 >= '" & _fecha1 & "' AND
  7.     Campo6 <= '" & _fecha2 & "' AND
  8.     Campo9 IN (" & _text & ") AND
  9.     Campo5 LIKE '%" & _val & "%'
  10. GROUP BY Campo5
Hay demasiadas condiciones en el WHERE (podría haber más), y al menos dos de ellas se pueden sintetizar con una sola cláusula.
Cuando pones demasiadas cosas en el WHERE debes recordar queel MySQL no puede optimizar lo que se ponga allí, lo que sí puede cuando va en el SELECT o el FROM.
Por otro lado, el uso de LIKE exige al MySQL la realización de una rutina mucho más compelja que simplemente un "=". El mejor modo de enfrentarlo sería realizar un prefiltrado de tabla usando subconsultas:
Código SQL:
Ver original
  1. SELECT  
  2.     Campo5
  3. FROM MyDBs.tblExample
  4. WHERE
  5.     Campo9 IN (" & _text & ")  AND
  6.     (Campo6 BETWEEN '" & _fecha1 & "' AND '" & _fecha2 & "');
Esto permitirá hacer un filtrado general sobre valores que deben estar sí o si. El MySQL construye una tabla en memoria con los registros que cumplen esta condición. Si luego ponemos:
Código SQL:
Ver original
  1. SELECT
  2.     Campo5,
  3.     COUNT(Campo5) AS 'Total'
  4. FROM
  5.     SELECT  
  6.         Campo5
  7.     FROM MyDBs.tblExample
  8.     WHERE
  9.     Campo9 IN (" & _text & ")  AND
  10.     (Campo6 BETWEEN '" & _fecha1 & "' AND '" & _fecha2 & "') ) Tabla1
  11. WHERE
  12.     Campo5 LIKE '%" & _val & "%'
  13. GROUP BY Campo5
Con esto, el LIKE se usará solamente sobre la tabla ya condensada con las otras condiciones, que son las que más registros van a eliminar, por lo que la tabla en memoria quedaría muy reducida.

Intentalo y veamos.

P.D.: Si se da algun error de sintaxis, será porque esto lo escribí un poco apurado.

Un tip final sería recomendarte que elimines el MySQL 6.0 y pongas el 5.1.4, ya que el 6.0 fue un proyecto alfa (las alfa son las que contienen todos los errores imaginables), y la release final de ese proyecto fue la 5.1.3, según entiendo, donde los bugs del 6.0 están corregidos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 28/07/2009, 13:38
 
Fecha de Ingreso: julio-2008
Mensajes: 116
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Error: Consulta Mysql-VB.net 2008

Hola que tal gnzsoloyo, muchas gracias por tu ayuda y tiempo prestado. Ahi probaré la consulta haber que tal. Por cualquier duda tendré que abrir un nuevo tema en MYSQL, por que como ya lo evidenciastes el problema es en la parte de SQL. Hay mucho que optimizar por ese lado :{.
Nuevamente mil gracias!!

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:27.