CONVERSION FAILED WHEN CONVERTING DATA/TIME FROM..

PERCIFILHO 22/08/2011 15:06:36
#382244
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.
RODRIGOFERRO 22/08/2011 15:16:55
#382246
PERCIFILHO 22/08/2011 15:38:27
#382249
Mas, por que só funciona em meu PC? Isso é que eu não consigo entender.
RODRIGOFERRO 22/08/2011 15:45:45
#382251
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 !
PERCIFILHO 22/08/2011 15:53:00
#382252
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.
RODRIGOFERRO 22/08/2011 16:16:08
#382256
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 !
PERCIFILHO 23/08/2011 09:02:04
#382296
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.
PEGUDO 23/08/2011 09:36:58
#382299
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:

[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.
PERCIFILHO 23/08/2011 15:36:23
#382334
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.
PERCIFILHO 23/08/2011 16:21:41
#382342
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.
Tópico encerrado , respostas não são mais permitidas