none
Select MySQL com critério de datas RRS feed

  • Pergunta

  • Tentei usando paramentos, porém só consegui o resultado esperado da maneira abaixo, existe uma maneira correta de se fazer um SELECT utilizando datas no critério em um BD MySQL?

        Public Function unidadeVisitasNoPeriodo_Unidades(strConexao As String, idUni As Integer, dataI As String, dataF As String) As Integer
            Dim conn As New MySqlConnection
            Dim i As Integer
    
            Dim dtI As String = dataI.Substring(6, 4) + "-" + dataI.Substring(3, 2) + "-" + dataI.Substring(0, 2)
            Dim dtF As String = dataF.Substring(6, 4) + "-" + dataF.Substring(3, 2) + "-" + dataF.Substring(0, 2)
    
            Try
    
                conn.ConnectionString = strConexao
    
                Dim strSQL As String = "SELECT VisitaUnidade.id_VisitaUnidade" _
                & " FROM VisitaUnidade" _
                & " WHERE (VisitaUnidade.idUnidade =" & idUni & ")" _
                & " And (VisitaUnidade.dataInicial = '" & dtI & "')" _
                & " And (VisitaUnidade.dataFinal =  '" & dtF & "')"
    
                Dim cmd As New MySqlCommand(strSQL, conn)
    
                i = Convert.ToInt32(cmd.ExecuteScalar)
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try
    
            Return i
    
        End Function
    


    Sergio Ivanenko

    segunda-feira, 4 de janeiro de 2016 16:55

Respostas

  • Faça sempre com Parameters ele é responsável pelas conversões!

    Public Function unidadeVisitasNoPeriodo_Unidades(strConexao As String, idUni As Integer, dataI As Date, dataF As Date) As Integer
    
            Dim conn As New MySqlConnection
            Dim i As Integer
            Try
    
                conn.ConnectionString = strConexao
    
                Dim strSQL As String = "SELECT VisitaUnidade.id_VisitaUnidade" _
                & " FROM VisitaUnidade" _
                & " WHERE (VisitaUnidade.idUnidade =@idUni)" _
                & " And (VisitaUnidade.dataInicial = @dataI)" _
                & " And (VisitaUnidade.dataFinal =  @dataF)"
    
                Dim cmd As New MySqlCommand(strSQL, conn)
                cmd.Parameters.Add("@idUni", MySqlDbType.Int32).Value = idUni
    
                'ou
                'cmd.Parameters.Add("@dataI", MySqlDbType.DateTime).Value = dataI
                'cmd.Parameters.Add("@dataF", MySqlDbType.DateTime).Value = dataF
    
                cmd.Parameters.Add("@dataI", MySqlDbType.Date).Value = dataI
                cmd.Parameters.Add("@dataF", MySqlDbType.Date).Value = dataF
    
                i = Convert.ToInt32(cmd.ExecuteScalar)
    
                cmd.Dispose()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try
    
            Return i
    
        End Function

    Perceba que na alteração do código pode ser Date ou DateTime no tipo da passagem então teste os duas formas, talvez mude conforme tipo de dado no banco!


    Fulvio C

    • Marcado como Resposta Marcos SJ segunda-feira, 4 de janeiro de 2016 18:51
    segunda-feira, 4 de janeiro de 2016 17:30