CONVERSION FAILED WHEN CONVERTING DATA/TIME FROM..
Quando executo a rotina em minha máquina não ocorre erro nenhum, porém quando executo em outra máquina, ocorre o seguinte erro:
Conversion failed when converting date and/or time from character string
Alguém sabe me dizer porque ocorre esse erro?
Estou usando BD Sql Server.
A parte do código da minha rotina é essa:
Dim datainicial As Date = Today
Dim data As Date = Today.AddMonths(CmbPeriodo.Text)
Dim cmdinstrumentos As SqlCommand
Dim drinstrumentos As SqlDataReader
Dgv.Columns.Item(3).HeaderText = [Ô]Vencimento[Ô]
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & datainicial & [Ô][ô] And [ô][Ô] & data & [Ô][ô] Order By vencimento Asc[Ô], conexao)
cmdinstrumentos.Connection = conexao
conexao.Open()
If cmdinstrumentos.ExecuteScalar = 0 Then
MsgBox([Ô]Nenhum registro para exibir[Ô], MsgBoxStyle.Critical, [Ô][Ô])
conexao.Close()
Exit Sub
End If
drinstrumentos = cmdinstrumentos.ExecuteReader()
While drinstrumentos.Read
Dim codigo As String = drinstrumentos.Item([Ô]codigo[Ô])
Dim codigointerno As String = drinstrumentos.Item([Ô]codigointerno[Ô])
Dim descricao As String = drinstrumentos.Item([Ô]descricao[Ô])
Dim vencimento As String = IIf(IsDBNull(drinstrumentos.Item([Ô]vencimento[Ô])), [Ô][Ô], drinstrumentos.Item([Ô]vencimento[Ô]))
Dgv.Rows.Add(codigo, codigointerno, descricao, vencimento)
End While
conexao.Close()
Até mais.
Conversion failed when converting date and/or time from character string
Alguém sabe me dizer porque ocorre esse erro?
Estou usando BD Sql Server.
A parte do código da minha rotina é essa:
Dim datainicial As Date = Today
Dim data As Date = Today.AddMonths(CmbPeriodo.Text)
Dim cmdinstrumentos As SqlCommand
Dim drinstrumentos As SqlDataReader
Dgv.Columns.Item(3).HeaderText = [Ô]Vencimento[Ô]
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & datainicial & [Ô][ô] And [ô][Ô] & data & [Ô][ô] Order By vencimento Asc[Ô], conexao)
cmdinstrumentos.Connection = conexao
conexao.Open()
If cmdinstrumentos.ExecuteScalar = 0 Then
MsgBox([Ô]Nenhum registro para exibir[Ô], MsgBoxStyle.Critical, [Ô][Ô])
conexao.Close()
Exit Sub
End If
drinstrumentos = cmdinstrumentos.ExecuteReader()
While drinstrumentos.Read
Dim codigo As String = drinstrumentos.Item([Ô]codigo[Ô])
Dim codigointerno As String = drinstrumentos.Item([Ô]codigointerno[Ô])
Dim descricao As String = drinstrumentos.Item([Ô]descricao[Ô])
Dim vencimento As String = IIf(IsDBNull(drinstrumentos.Item([Ô]vencimento[Ô])), [Ô][Ô], drinstrumentos.Item([Ô]vencimento[Ô]))
Dgv.Rows.Add(codigo, codigointerno, descricao, vencimento)
End While
conexao.Close()
Até mais.
Use parametros nas suas consultas... veja o link abaixo !
http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/2e36331d-0081-47e4-a0f4-fe3183547187/
Abraços
http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/2e36331d-0081-47e4-a0f4-fe3183547187/
Abraços
Mas, por que só funciona em meu PC? Isso é que eu não consigo entender.
Rapaz eu acredito que é devido a sua configuração regional do windows, ali onde voce seta ..
Dim datainicial As Date = Today
alguma coisa relacionada a isso, é muito melhor trabalhr com parametros quando se vai usar sql direto no codigo !
voce ja degubou a sql que te retornou ?
Abraços !
Dim datainicial As Date = Today
alguma coisa relacionada a isso, é muito melhor trabalhr com parametros quando se vai usar sql direto no codigo !
voce ja degubou a sql que te retornou ?
Abraços !
Pois é, acontece que só na minha máquina tem o VB instalado, eu crio o executável e jogo na rede, depois em outra máquina, quando vai rodar, acontece esse erro. Se eu debugar na minha máquina, não acontece nada, pois na minha não ocorre o erro.
Vou tentar entender melhor esses parâmetros e tentar modificar meu código para tentar funcionar. Quanto à s configurações regionais, não tem nada a ver, porque conferi as minhas configurações e estão iguais as duas máquinas.
Até mais.
Vou tentar entender melhor esses parâmetros e tentar modificar meu código para tentar funcionar. Quanto à s configurações regionais, não tem nada a ver, porque conferi as minhas configurações e estão iguais as duas máquinas.
Até mais.
Entao eu aconselho voce pegar a SQL gerada na string que esta dando erro nas maquinas, e por um TRY CATCH com a SQL GERADA...
Ai nao tem errro !
Ai nao tem errro !
Ainda sou praticamente iniciante no VB.Net e nunca utilizei Try/Catch, poderia me dar um exemplo? E outra coisa, aproveitando o tópico, no caso de trabalhar com datas, nas tabelas é melhor criar os campos tipo data? Pois percebo que na maioria das vezes os problemas são gerados quando campos são tipo data. No Access e no SQL Server os formatos são diferentes e, creio que nos outros BDs (que eu não conheço), cada um tem uma maneira diferente de formatar as datas. Muitas vezes o formato não é igual ao padrão do Windows e aà vira uma confusão danada, tem que formatar datas, ocorrem erros que deixam a gente louco, dá um trabalhão para acertar. Gostaria de sugestões.
Até mais.
Até mais.
Cara, eu tive muito trabalho com estes erros, justamente por uma configuração regional ser diferente de uma máquina para outra.
Então, após quase quebrar a cabeça e quase ficar p... com estes erros, eu resolvo fazer assim, por exemplo:
Claro que esta não é a prática correta a ser adotada, mas como eu já falei, antes de jogar o PC na parede,
encontrei esta gambiarra rápida e temporária.
Então, após quase quebrar a cabeça e quase ficar p... com estes erros, eu resolvo fazer assim, por exemplo:
[txt-color=#0000f0]Dim[/txt-color] Dia [txt-color=#0000f0]As String[/txt-color] = [txt-color=#0000f0]Date[/txt-color].Now.Day
[txt-color=#0000f0]Dim[/txt-color] Mes [txt-color=#0000f0]As String[/txt-color] = [txt-color=#0000f0]Date[/txt-color].Now.Month
[txt-color=#0000f0]Dim[/txt-color] Ano [txt-color=#0000f0]As String[/txt-color] = [txt-color=#0000f0]Date[/txt-color].Now.Year
[txt-color=#0000f0]If[/txt-color] Dia.Length = 1 [txt-color=#0000f0]Then[/txt-color] Dia = [txt-color=#e80000][Ô]0[Ô][/txt-color] & Dia
[txt-color=#0000f0]If[/txt-color] Mes.Length = 1 [txt-color=#0000f0]Then[/txt-color] Mes = [txt-color=#e80000][Ô]0[Ô][/txt-color] & Mes
[txt-color=#007100][ô]Aà faço o seguinte, por exemplo:[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] C [txt-color=#0000f0]As New[/txt-color] ADODB.Connection, RecSet [txt-color=#0000f0]As[/txt-color] RecordSet
RecSet = C.Execute([txt-color=#e80000][Ô]SELECT * FROM tblDados WHERE day(data) = [ô] [Ô][/txt-color] & dia & [txt-color=#e80000][Ô] [ô] and month(data) = [ô] [Ô][/txt-color] & Mes & [txt-color=#e80000][Ô] [ô] and year(data) = [ô] [Ô][/txt-color] & Ano & [txt-color=#e80000][Ô] [ô] [Ô][/txt-color])
Claro que esta não é a prática correta a ser adotada, mas como eu já falei, antes de jogar o PC na parede,
encontrei esta gambiarra rápida e temporária.
Há alguma coisa errada com esse código?
Dim hoje As DateTime = Date.Now
Dim data As DateTime = hoje.AddMonths(CmbPeriodo.Text)
Dim cmdinstrumentos As SqlCommand
Dim drinstrumentos As SqlDataReader
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & hoje & [Ô][ô] And [ô][Ô] & data & [Ô][ô] Order By cdate(vencimento) Asc[Ô], conexao)
cmdinstrumentos.Connection = conexao
O que estou fazendo aqui é o seguinte:
Preciso mostrar em uma tela todos os instrumentos que vão vencer de hoje até determinada data, estipulada em meses.
Então eu escolho numa ComboBox (CmbPeriodo) a quantidade de meses. Então eu pesquiso na tabela quais os instrumentos irão vencer de hoje até hoje+quantidade de meses escolhida.
Só para lembrar: estou usando Banco de Dados Sql Server. A maneira correta de pesquisar datas com o Between é essa mesmo?
Até mais.
Dim hoje As DateTime = Date.Now
Dim data As DateTime = hoje.AddMonths(CmbPeriodo.Text)
Dim cmdinstrumentos As SqlCommand
Dim drinstrumentos As SqlDataReader
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & hoje & [Ô][ô] And [ô][Ô] & data & [Ô][ô] Order By cdate(vencimento) Asc[Ô], conexao)
cmdinstrumentos.Connection = conexao
O que estou fazendo aqui é o seguinte:
Preciso mostrar em uma tela todos os instrumentos que vão vencer de hoje até determinada data, estipulada em meses.
Então eu escolho numa ComboBox (CmbPeriodo) a quantidade de meses. Então eu pesquiso na tabela quais os instrumentos irão vencer de hoje até hoje+quantidade de meses escolhida.
Só para lembrar: estou usando Banco de Dados Sql Server. A maneira correta de pesquisar datas com o Between é essa mesmo?
Até mais.
Fiz uma pequena alteração na Select e parece que consegui resolver o problema:
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & hoje.ToString([Ô]yyyy-MM-dd[Ô]) & [Ô][ô] And [ô][Ô] & data.ToString([Ô]yyyy-MM-dd[Ô]) & [Ô][ô] Order By vencimento Asc[Ô], conexao)
Obrigado aos que me ajudaram.
Até mais.
cmdinstrumentos = New SqlCommand([Ô]Select * From Instrumentos Where vencimento Between [ô][Ô] & hoje.ToString([Ô]yyyy-MM-dd[Ô]) & [Ô][ô] And [ô][Ô] & data.ToString([Ô]yyyy-MM-dd[Ô]) & [Ô][ô] Order By vencimento Asc[Ô], conexao)
Obrigado aos que me ajudaram.
Até mais.
Tópico encerrado , respostas não são mais permitidas