Pergunta

Eu uso o SQL Server 2008 R2 como um armazenamento de dados.

Até agora, na máquina de teste, eu tinha a versão em inglês do software e costumava fazer consultas formatando o campo DateTime como

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

Agora, implantei o banco de dados em outro servidor que está no idioma italiano. Vou mudar o formato no meu código para

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

Existe uma maneira de fazer a consulta em um formato neutro?

obrigado!

EDITAR:

Esqueci de mencionar que estou usando Nettiers com Codesmith. Aqui está uma amostra 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);
Foi útil?

Solução

ISO 8601 Elementos de dados e formatos de intercâmbio - Intercâmbio de informações - Representação de datas e horários Permite o yyyy-mm-dd e o yyyymmdd. O SQL Server reconhece as especificações da ISO.

Embora o padrão permita que os formatos AAYYY-MM-DD e AHYYYMMDD para representações completas de data do calendário, se o dia [DD] for omitido, apenas o formato AAAA-MM é permitido. Ao proibir as datas da forma yyyymm, o padrão evita confusão com a representação truncada Yymmdd (ainda usada com frequência).

Eu prefiro o formato yyyymmdd, mas acho que é porque eu só sabia disso para começar, e para mim parece mais universal, tendo acabado de acabar com os personagens que podem ser considerados específicos do local.

Outras dicas

Você deve compartilhar o código que está usando para executar a consulta, mas acho que você está criando uma consulta SQL dinamicamente usando concativas de string para criar a consulta e os argumentos. Você prefere usar uma consulta parametrizada, então pode passar os dados como um objeto de data e não precisar converter uma string.

Por exemplo, se sua consulta pode ser algo assim

DateTime fromDate = DateTime.Now;

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

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

...

Como um bom efeito colateral, isso reduzirá seu risco de injeção SQL. Atualizar: Após a sua edição, que muda significativamente o contexto da pergunta, e tenho que admitir que não tenho conhecimento do projeto .NETTIERS. Mas por curiosidade você já tentou passar as instâncias de data diretamente como a seguir?

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); 

Pessoalmente, eu sempre uso yyyy-MM-dd. Isso também o torna classificável como uma string.

No entanto, uma data é uma data é uma data. Não há necessidade de alterar a data para uma string. Em .net, usuário DateTime.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top