Error de sintaxis en una consulta

02/12/2005 - 22:41 por Ivan Saucedo | Informe spam
Saludos grupo:

-Estoy tratando de recuperar un campo de un registro mediante una consulta
SQL pero tengo problemas porque me manda un error de sintaxis y no se
porque, le pongo la linea en cuestion:

DbCommand.CommandText = "SELECT idHistoria FROM Historial WHERE id = " + id
+ " AND Fecha = #" + tmpFecha + "#";

-Cuando ejecuto esta consulta utilizo OleDbException para mostrar el mensaje
de error y es el siguiente:

Error de sintaxis en la fecha en la expresion de consulta 'id = 28 AND Fecha
= #Dic-02-2005#'

- Y sucede en la linea que les pongo a continuacion

LeeIdHistoria = DbCommand.ExecuteReader();

- LeeIdHistoria es un OleDbDataReader
- La conexion a la base de datos esta abierta
- La base de datos esta en Access
- El campo es Date/Time (Fecha corta)
- El formato de fecha que utilizo es MMM-dd-aaaa (en mi sistema operativo)
- DCommand es un OleDbCommand

* Acaso no se pueden comparar dos tipos de datos distintos en la clausula
WHERE??

Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Ivan Saucedo
03/12/2005 - 02:12 | Informe spam
Saludos grupo:

Un comentario a lo anterior:

Si el mes de la Fecha que estoy comparando es anterior al mes actual, la
consulta se ejecuta con exito... esto me tiene intrigado porque no puedo
realizar la consulta con la fecha actual.

Hasta luego


"Ivan Saucedo" escribió en el mensaje
news:
Mostrar la cita
#2 A.Poblacion
03/12/2005 - 09:24 | Informe spam
"Ivan Saucedo" wrote in message
news:
Mostrar la cita
id
Mostrar la cita
mensaje
Mostrar la cita
Fecha
Mostrar la cita
No hay ningún problema en comparar tipos de datos distintos en el
WHERE. El problema de este tipo de consultas suele estar en el formato de la
fecha. Cuando haces el "+ tmpFecha +", asumiendo que tmpFecha sea de tipo
DateTime, el compilador lo interpreta haciendo un tmpFecha.ToString() para
poderla concatenar, y el ToString usa el formato que esté en ese momento
configurado. Por otra parte, el parser de la consulta Sql que utiliza OleDb
espera las fechas en un formato que sigue criterios distintos, por lo que
dependiendo de la configuración es bastante fácil que no concuerden los dos
formatos.
Para no volverse loco pensando en cómo hay que formatear la fecha para
que el programa funcione siempre bajo todas las circunstancias, lo mejor es
parametrizar la consulta y dejar que el formateo se realice automáticamente
de forma interna:

DbCommand.CommandText "SELECT idHistoria FROM Historial WHERE id=? AND Fecha=?";
DbCommand.Parameters.Add("id", id);
DbCommand.Parameters.Add("fecha", tmpFecha);

LeeIdHistoria = DbCommand.ExecuteReader();
#3 Ivan Saucedo
03/12/2005 - 20:32 | Informe spam
Hola que tal:

Segui tu consejo y utice el codigo que me pusiste:

DbCommand.CommandText "SELECT idHistoria FROM Historial WHERE id=? AND Fecha=?";
DbCommand.Parameters.Add("id", id);
DbCommand.Parameters.Add("fecha", tmpFecha);


pero ahora cuando ejecuto la consulta me dice:

SELECT idHistoria FROM Historial WHERE id=? AND Fecha=?
No coinciden los tipos de datos en la expresión de criterios





"A.Poblacion" escribió en
el mensaje news:ulgnFM%
Mostrar la cita
#4 A.Poblacion
04/12/2005 - 10:18 | Informe spam
"Ivan Saucedo" wrote in message
news:ulUgSBE%
Mostrar la cita
Para que funcione la sintaxis "simple" del Parameters.Add (pasándole
sólo (nombre, valor)), hace falta que el valor sea del mismo tipo que espera
la sentencia SQL. En tu caso, si el "id" de la tabla Historial es de tipo
INT, es necesario que la variable id del Parameters.Add sea de tipo int. Y
si el Fecha de Historial es de tipo DATETIME, es necesario que el tmpFecha
sea de tipo DateTime.

Si quieres, puedes usar la sintaxis más completa, que especifica el tipo
de argumento que pasas en el parámetro:

DbCommand.CommandText "SELECT idHistoria FROM Historial WHERE id=? AND Fecha=?";
OleDbParameter param1 = new OleDbParameter("id", OleDbType.Integer);
param1.Value = id;
DbCommand.Parameters.Add(param1);
OleDbParameter param2 = new OleDbParameter("fecha", OleDbType.Date); //Si
no funciona con .Date, prueba .DBDate
param2.Value = tmpFecha;
DbCommand.Parameters.Add(param2);
#5 Hadi Hariri
04/12/2005 - 21:58 | Informe spam
Además, utilizar parámetros es recomendable para evitar lo que se
conoce por "SQL injections", que es un riesgo de seguridad



Hadi Hariri
¿Eres un desarrollador y te encuentras en Andalucía? Escríbeme a lists
arroba hadihariri punto com
http://www.hadihariri.com
Ads by Google
Search Busqueda sugerida