[DUVIDA] CAMPO DATA EM BANCO MYSQL

W8.LISBOA 27/06/2015 15:38:49
#448224
Galera, tenho um projeto em VB.NET e sempre tenho problemas ao comparar datas, no meu caso uso Mysql e deixo como [Varchar], a pergunta é: essa é uma boa pratica ou devo usar [Date], e como isso pode influenciar na consulta posteriormente?
XLEGENDARY 27/06/2015 16:23:00
#448226
E uma pessima pratica, o campo date existe exatamente pra isso. De vc quer manipular datas vc tem que usar o date e não varchar. Use date e converta pro formato que vai pro mysql e seja feliz com uma ótima pratica de programação
W8.LISBOA 27/06/2015 16:55:50
#448228
Entendi, fiz as modificações aqui, mas acredito estar cometendo erros na consulta, acredito que usar BETWEEN seria uma melhor opção, veja meu código e se possível acrescentar alguma sugestão:

   Private Sub CarregaTodosPorData()

Dim datainicio As String
Dim datafinal As String
datainicio = Format(DateTimePicker1.Value, [Ô]yyyy-mm-dd[Ô])
datafinal = Format(DateTimePicker2.Value, [Ô]yyyy-mm-dd[Ô])

Using con As MySqlConnection = ConexaoComMysql()
Try
con.Open()
Dim sql As String = [Ô]SELECT * FROM Pagamentos WHERE Data >= @DADAINICIO and Data <= @DATAFINAL ORDER BY @ORDEM[Ô]
Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@ORDEM[Ô], MySqlDbType.VarChar).Value = ComboBox3.Text
cmd.Parameters.Add([Ô]@DADAINICIO[Ô], MySqlDbType.Date).Value = datainicio
cmd.Parameters.Add([Ô]@DATAFINAL[Ô], MySqlDbType.Date).Value = datafinal
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Using
End Sub
XLEGENDARY 27/06/2015 17:27:03
#448231
Se fosse passa o valor pra variáveis vc não precisa passar o tipo do campo por parâmetros no cmd
Passa somente o campo e a variável e use between
OMAR2011 28/06/2015 11:05:04
#448248
Resposta escolhida
Private Sub CarregaTodosPorData()

Dim datainicio As String
Dim datafinal As String
[ô]datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]Formato data vbnet
[ô]datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]
datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy-MM-dd[Ô])
datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy-MM-dd[Ô]) [ô]

Using con As MySqlConnection = Getconnectionmysql()
Try
con.Open()
[ô]Dim sql As String = [Ô]SELECT * FROM Pagamentos WHERE Data >= @DADAINICIO and Data <= @DATAFINAL ORDER BY @ORDEM[Ô] [ô]Não tem hábito de usar.
[ô] Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida >= @DADAINICIO and Datadesaida <= @DATAFINAL ORDER BY ORDEM[Ô]
Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida between @DADAINICIO and @DATAFINAL [Ô]
Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
cmd.Parameters.Clear()
[ô]cmd.Parameters.Add([Ô]@ORDEM[Ô], MySqlDbType.VarChar).Value = ComboBox3.Text [ô]Não faço isto
cmd.Parameters.Add([Ô]@DADAINICIO[Ô], MySqlDbType.Date).Value = datainicio
cmd.Parameters.Add([Ô]@DATAFINAL[Ô], MySqlDbType.Date).Value. = datafinal
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
Catch ex As MySqlException
MsgBox(ex.Message)
End Try
End Using
End Sub
Funcionar com os dois tipos.
JCM0867 28/06/2015 11:27:22
#448252
Salvo como NULL no banco de dados qdo a data está em branco. Acredito que não tenha como salvar em branco.
Campos date salve como date, Salvando como string resultará em gambiarras futuramente.
Tópico encerrado , respostas não são mais permitidas