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