Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

lunes, 29 de agosto de 2016

Cómo hacer un Select en un Datatable con campos tipo DateTime

Esta pregunta la hice en StackOverflow en Español, he aquí el resumen:

Tengo un DataTable con dos campos "BirthDay" y "HireDay" del tipo DateTime, y quiero filtrar las filas que correspondan a dos fechas determinadas.
Siguiendo las instrucciones de este enlace armé mi query de la siguiente manera:

DateTime bday = new DateTime(2016, 8, 9);
DateTime hday = new DateTime(2016, 8, 10);

String query =
String.Concat("BirthDay=#", Convert.ToString(bday.Date), "# or HireDay=#", Convert.ToString(bday.Date), "#");
DataRow[] encontrados = miDatatable.Select(query);


Al ejecutar mi aplicación me lanza esta excepción:

Excepción no controlada del tipo 'System.FormatException' en mscorlib.dll
Información adicional: La cadena no se reconoce como DateTime válido. Hay una palabra desconocida al inicio del índice 24.

En cambio, si cambio manualmente el valor de la variable query a:
"BirthDay=#09/08/2016# or HireDay=#10/08/2016#"  
no me tira excepción, pero ya no me devuelve ninguna fila, a pesar de que sí tengo fechas en los campos "BirthDay" y "HireDay" iguales al 9 de agosto del 2016.

La solución me la dio Leandro Tuttini, el formato de fecha debe ser en-US, independientemente de la configuración regional del sistema operativo. La variable query debe armarse de la siguiente forma:

DateTime bday = new DateTime(2016, 8, 9);
DateTime hday = new DateTime(2016, 8, 10);

string query =  string.Format("BirthDay=#{0:MM/dd/yyyy}# or HireDay=#{1:MM/dd/yyyy}#", bday, hday);

DataRow[] encontrados = miDatatable.Select(query);