Estou tentando salvar o formato de data e hora atual de C # e convertê-lo em um formato de data do SQL Server yyyy-MM-dd HH:mm:ss
para que possa usá-lo em minha UPDATE
consulta.
Este foi meu primeiro código:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
A saída na data está correta, mas a hora é sempre "12:00:00", então mudei meu código para o seguinte:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Isso me deu este erro de compilação:
FormatException não foi tratada
E sugeriu que preciso analisar. Então, tentei fazer isso com meu código de acordo com minha pesquisa aqui no StackOverflow:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
ou
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
Mas está me dizendo que é um método que não é válido para um determinado contexto. Tentei buscar soluções para o meu problema e estou paralisado há duas horas. Ainda sou um pouco novo em C #, você pode me ajudar, por favor?
DateTime
ou você o está armazenando como uma string? TambémToString
naDate
implicaria que o tempo é sempre12:00:00
DATETIME
e então você pode evitar fazer tudo isso convertendo para frente e para trás de e para uma representação de string!datetime
seria um bom começo. Melhor ainda, por que você está passando a hora atual para o servidor - ela tem umaGETDATE()
função que pode ser chamada inteiramente no lado do servidor.Respostas:
tente isso abaixo
fonte
yyyy-MM-dd
da hora do dia, e o nome "ISO8601" para o formulário onde está o caractere de separação aT
. Mas sim, ambas as formas são convertidas implicitamente (e corretamente) em adatetime
.Usar o formato de data e hora padrão "s" também garantirá a compatibilidade de internacionalização (MM / dd versus dd / MM):
Opções completas: (código: resultado da amostra)
Compatível com .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Referência:
DateTime.ToString
Métodofonte
A resposta correta já foi dada "usar parâmetros". Formatar uma data e passá-la como string para o SQL-Server pode levar a erros, pois depende das configurações de como a data é interpretada no servidor. Na Europa, escrevemos '1.12.2012' para indicar 1º de dezembro de 2012, enquanto em outros países isso pode ser tratado como 12 de janeiro.
Ao emitir declarações diretamente no SSMS, uso o formato
yyyymmdd
que parece ser bastante geral. Não encontrei nenhum problema nas várias instalações em que trabalhei até agora.Existe outro formato raramente usado, que é um pouco estranho, mas funciona para todas as versões:
retornará no dia primeiro de outubro de 2013.
voltará em 1º de outubro, 13:45:01
Aconselho fortemente o uso de parâmetros e nunca formate seu próprio código SQL colando fragmentos de instrução formatados desenvolvidos internamente. É uma entrada para injeção de SQL e erros estranhos (formatar um valor flutuante é outro problema potencial)
fonte
Seu primeiro código funcionará fazendo isso
fonte
Seu problema está na propriedade "Data" que trunca
DateTime
somente até a data. Você poderia colocar a conversão assim:fonte
A resposta que eu procurava era:
Também aprendi que você pode fazer desta forma:
onde myCountryDateFormat pode ser alterado para atender às alterações dependendo do requisito.
Observe que a tag "Esta pergunta pode já ter uma resposta aqui:" não respondeu realmente à pergunta porque, como você pode ver, foi usado um ".Data" em vez de omiti-lo. É muito confuso para novos programadores de .NET
fonte
se você deseja armazenar a data atual na tabela para que possa usar
ou passe esta função como um parâmetro
por exemplo. 'update tblname set curdate = GETDATE () where colname = 123'
fonte
Por que não pular a string completamente:
fonte
Seu problema está na
Date
propriedade que truncaDateTime
até hoje. Você poderia colocar a conversão assim:fonte
Outra solução para passar DateTime de C # para SQL Server, independentemente das configurações de idioma do SQL Server
supostamente, suas configurações regionais mostram a data como dd.MM.aaaa (padrão alemão '104'), então
passa a variável datetime C # para a variável do tipo Data do SQL Server, considerando o mapeamento de acordo com as regras "104". A data do Sql Server obtém aaaa-MM-dd
Se suas Configurações regionais exibirem DateTime de maneira diferente, use a correspondência apropriada da Tabela CONVERTER do SQL Server
veja mais sobre Regras: https://www.techonthenet.com/sql_server/functions/convert.php
fonte
Acho que o problema eram as duas aspas simples faltando.
Este é o sql que executo para o MSSMS:
Como você pode ver, existem duas aspas simples, portanto, seus códigos devem ser:
Use aspas simples para cada string no MSSQL ou mesmo no MySQL. Eu espero que isso ajude.
fonte
Vamos usar a classe SqlDateTime integrada
Mas ainda precisa verificar se há valores nulos. Isso lançará uma exceção de estouro
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
fonte
apenas você coloca "T" + DateTime.Now.ToLongTimeString () + '2015-02-23'
fonte
Se você deseja atualizar uma tabela com esse dateTime, pode usar sua string sql como este exemplo:
fonte
"
.fonte