Pregunta

Yo uso de SQL Server 2008 R2 como un almacén de datos.

Hasta ahora en la máquina de prueba que tenía la versión Inglés del software y se utiliza para realizar consultas de formato del campo fecha y hora como

fromDate.ToString("MM/dd/yyyy");

Ahora he desplegado la base de datos en otro servidor que está en el idioma italiano. Voy a cambiar el formato en mi código para

fromDate.ToString("dd/MM/yyyy");

¿Hay una manera de hacer la consulta en un formato neutral?

Gracias!

Editar

Me olvidé de mencionar que estoy usando NetTiers con CodeSmith. He aquí una muestra completa

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
¿Fue útil?

Solución

ISO 8601 Elementos de datos y formatos de intercambio - Intercambio de información - Representación de fechas y horas permite tanto la AAAA-MM-DD y AAAAMMDD. SQL Server reconoce las especificaciones ISO.

  

A pesar de que la norma permite que tanto el   formatos AAAA-MM-DD y para AAAAMMDD   fecha de calendario completa   representaciones, si el día [DD] es   omitido entonces sólo el formato AAAA-MM   esta permitido. Rechazando fechas   la forma YYYYMM, los evita estándar   confusión con el truncado   representación AAMMDD (todavía a menudo   se utiliza).

Yo prefiero el formato AAAAMMDD, pero yo creo que es porque yo sólo sabía sobre eso para empezar, y me parece más universal, después de haber acabado con personajes que podrían ser considerados configuración regional específica.

Otros consejos

Usted debe compartir el código que está utilizando para ejecutar la consulta, pero supongo que usted está construyendo una consulta SQL de forma dinámica utilizando concats cadena para construir la consulta y los argumentos. Usted no debe utilizar una consulta parametrizada a continuación, puede pasar los datos como un objeto de fecha y no hay necesidad de Converto una cadena.

Por ejemplo, si la consulta podría ser algo como esto

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

Como efecto secundario bien, esto reducirá el riesgo de inyección de SQL . Actualización: Después de su edición, que hace cambiar el contexto de la pregunta de manera significativa, y tengo que admitir que tengo cero conocimiento del proyecto .netTiers. Pero sólo por curiosidad ¿Ha intentado simplemente pasando las instancias fecha directamente como en el siguiente?

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

En lo personal, yo siempre uso yyyy-MM-dd. Esto también hace que sea ordenable como una cadena.

Sin embargo, una fecha es una fecha es una fecha. No hay necesidad de cambiar la fecha en una cadena. En .NET, DateTime usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top