Pergunta

Eu encontrei uma pergunta semelhante sobre estouro de pilha, mas ele realmente não responder à pergunta que eu tenho. Eu preciso ter certeza de que a minha aplicação asp.net está formatando a data dd / mm / aaaa o mesmo que meu SQL Server 2005.

Como posso verificar a cultura data (se é isso que ele é chamado) das partidas servidor como eu programadas meu aplicativo? Existem configurações de banco de dados específico e configurações do sistema operacional? É específico da mesa? Eu não quero transpor meus dias e meses.

obrigado

Foi útil?

Solução

Quando você começa um DateTime para fora do banco de dados, ele deve estar em um formato não-cultivadas (como o objeto DateTime, com base no número de tiques desde uma determinada data). É só quando você está convertendo esse valor em uma seqüência que você precisa se preocupar com a cultura. Nesses casos, você pode usar yourDateTimeValue.ToString ( "dd / mm / aaaa", CultureInfo.InvariantCulture) para se certificar de que as informações são exibidas corretamente.

Outras dicas

Eu acredito que se você usar SqlParameters ADO.NET vai cuidar do resto e você não precisa se preocupar com isso. Além disso, é bom para a defesa contra SQL ataques de injeção também! :)

** cuidado porque colunas SQL DateTime são não-nulo e seu valor mínimo é de 1/1/1753, enquanto DateTimes .net são não-nulo com valores mínimo de 1/1/0001. **

Se você está puxando dados de uma coluna verdadeira DateTime, por padrão, ele estará sempre no mesmo formato padrão. Para salvar os dados para a coluna, você pode querer especificar o SqlDbType.DateTime em seu parâmetro.

i arrancou isto fora de http://bytes.com/forum/thread767920.html:

com.Parameters.Add ( "@ adate", SqlDbType.DateTime) .Value = DateTime.Now;

Bem, se você manter a data e hora campos do DB você não deve se preocupar com isso.

Enquanto você manter as datas em aplicativo fortemente tipado (DateTime variáveis) e enviar as datas através de declarações preparadas com DbParameter / SqlParameter seu DB irá tomá-los como é.

Se você usar cordas para manter suas datas em código, alguns moldes irá garantir que você enviar os valores corretos:

string sqlCmd = @"SELECT *
   FROM MyTable
   WHERE MyDateField = CONVERT(datetime, '{0}', 101)";

// assuming myDateString is a string with a date in the local format
sqlCmd = string.Format(sqlCmd,
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd"));

(o código é feio, mas espero que ele obtenha o ponto transversalmente)

Como já foi mencionado, você deve estar OK, tanto quanto o armazenamento datetimes culturalmente. O que eu recomendo é que você armazenar todos os seus tempos como tempo UTC padrão. No SQL Server 2005 e mais velhos não há nenhuma maneira de informações de zona loja de tempo, mas se tudo é armazenado no tempo universal, você deve estar OK, porque o tempo pode ser convertido para a hora local mais tarde.

SQL Server 2008 tem alguns tipos de dados que estão cientes de fusos horários, e se você estiver usando NET 3.5 existem ferramentas para ajudar com o tempo de manipulação zona / conversões.

Definitivamente manter vezes em formato universal. Isto irá fazer um mundo de diferença se você tem que trabalhar em vários fusos horários.

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