VB .NET - Selecionando registros entre um intervalo de datas no SQL Server
Você já precisou selecionar registros em um intervalo de datas em um banco de dados SQL Server ?
Pode parecer uma tarefa simples, mas você pode se complicar para realizar esta tarefa.
Este artigo mostra como podemos selecionar registros em uma tabela de um banco de dados SQL Server entre um intervalo de datas.
Neste artigo eu vou usar uma consulta SQL parametrizada com a cláusula Between.
O operador BETWEEN é usado para selecionar valores dentro de um intervalo. Os valores podem ser números, textos, ou datas.
A sintaxe SQL é a seguinte:
SELECT nome_colunas
FROM nome_tabela
WHERE nome_coluna BETWEEN valor1 AND valor2
Nota: O operador Between pode apresentar resultados diferentes em bancos de dados diferentes.
Recursos usados
Criando o banco de dados
Abra o Visual Studio 2012 Express for Windows Desktop e no menu VIEW clique em Other Windows -> DataBase Explorer
Na janela do DataBase Explorer clique com o botão direito do mouse sobre Data Connection e a seguir clique em Add Connection;
A seguir informe o nome do Servidor. Eu estou usando o SQL Server Local DB.
O
Microsoft SQL Server 2012 Express LocalDB é um
modo de execução do SQL Server Express destinado a desenvolvedores de
programas.
A instalação do LocalDB copia um conjunto mínimo de arquivos necessários para iniciar o mecanismo de Banco de Dados do SQL Server. Quando o LocalDB é instalado, os desenvolvedores iniciam uma conexão usando uma cadeia de conexão especial. Na conexão, a infraestrutura necessária do SQL Server é criada e iniciada automaticamente, permitindo que o aplicativo use o banco de dados sem tarefas de configuração complexas ou demoradas. O Developer Tools pode fornecer aos desenvolvedores um mecanismo de Banco de Dados do SQL Server que permite que eles gravem e testem o código Transact-SQL sem precisar gerenciar uma instância de servidor inteira do SQL Server. Uma instância do SQL Server Express LocalDB é gerenciada com o utilitário SqlLocalDB.exe. O SQL Server Express LocalDB deve ser usado em lugar do recurso de instância de usuário do SQL Server Express, que ficou obsoleto. |
Informe também o nome do banco de dados que deseja criar em Connect to database e clique no botão OK;
Isso irá criar o banco de dados Cadastro.mdf no SQL Server. Vamos agora criar a tabela Funcionarios.
Na janela DataBase Explorer expanda os objetos do banco de dados Cadastro e clique com o botão direito do mouse sobre o objeto Tables;
A seguir clique em Add New Table:
Defina a tabela Funcionarios com a seguinte estrutura :
Vamos usar a tabela funcionários e campo Admissao para podermos selecionar registros em um intervalo de datas.
Criando o Projeto
Abra o Visual Studio 2012 Express for Windows Desktop e crie um novo projeto do tipo Windows Application com o nome : Obtendo_Dados_Entre_Duas_Datas
No formulário padrão form1.vb inclua os seguintes controles:
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Vamos agora incluir um novo formulário no projeto para que possamos incluir dados na tabela Funcionarios e assim termos uma massa de dados para consultas.
No menu Project clique em Add Windows Forms e selecione o template Windows Form aceitando o nome Form2.vb.
No formulário form2.vb inclua os seguintes controles:
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Vamos agora definir o código no formulário Form2.vb para incluir dados na tabela Funcionarios.
No evento Click do botão de comando - Inserir Dados - inclua o código abaixo:
Private Sub btnInserir_Click(sender As Object, e As EventArgs) Handles btnInserir.Click Dim strSql As String = "" Dim nome As String = "" Dim admissao As New DateTime Dim salario As Decimal = 0 nome = txtNome.Text admissao = dtpAdmissao.Value salario = Convert.ToDecimal(txtSalario.Text) strSql = "Insert Into Funcionarios(Nome,Admissao,Salario) values(@nome,@admissao,@salario)" Dim con As New SqlConnection Dim cmd As New SqlCommand Try con.ConnectionString = "Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True" con.Open() cmd.Connection = con cmd.Parameters.AddWithValue("@nome", nome) cmd.Parameters.AddWithValue("@admissao", admissao) cmd.Parameters.AddWithValue("@salario", salario) cmd.CommandText = strSql cmd.ExecuteNonQuery() MessageBox.Show("Dados incluídos com sucesso") Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Inserir Registros") Finally con.Close() End Try End Sub |
Para chamar o formulário form2.vb a partir do formulário form1.vb inclua o código a seguir no evento Click do botão de comando Inserir do formulário form1.vb:
Private Sub btnInserir_Click(sender As Object, e As EventArgs) Handles btnInserir.Click
Form2.Show()
End Sub
|
Agora chamando o formulário form2.vb e com esse código conseguimos incluir diversos registros na tabela Funcionarios. Abaixo vemos a massa de dados que temos cadastrada:
Note que a data esta sendo armazenada no formato DateTime no formato dd/mm/aaaa hh:mm:ss.
Consultando dados em um intervalo de datas
Vamos agora retornar ao formulário form1.vb e definir o código para realizar a consulta em um intervalo de datas.
Vamos usar o campo Admissao da tabela Funcionarios para consultar os registros dos funcionários que foram admitidos em um intervalo de dados.
Esse é apenas um exemplo e você pode adaptar para o seu caso variando a tabela e o campo.
Private Sub btnFiltrar_Click(sender As Object, e As EventArgs) Handles btnFiltrar.Click
Dim dtinicio As String
Dim dtfim As String
Dim tabela As New DataTable
Dim strsql As String
dtinicio = dtpInicio.Value.ToString
dtfim = dtpFim.Value.ToString
strsql = "Select * from Funcionarios Where admissao between @dtInicio And @dtFim order by admissao"
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Try
con.ConnectionString = "Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"
con.Open()
cmd.Connection = con
cmd.Parameters.AddWithValue("@dtInicio", dtinicio)
cmd.Parameters.AddWithValue("@dtFim", dtfim)
cmd.CommandText = strsql
Using reader As SqlDataReader = cmd.ExecuteReader()
tabela.Load(reader)
dgvFunci.DataSource = tabela
End Using
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message, "Consultar Registros")
Finally
con.Close()
End Try
End Sub
|
O código acima é bem simples mas quero destacar o seguinte:
A instrução SQL utiliza a cláusula Between para pesquisar em um intervalo de dados definidos no campo Admissao.
Por isso as variáveis dtinicio e dtfim usadas como parâmetros no comando SQL:
"Select * from Funcionarios Where admissao between @dtInicio And @dtFim order by admissao"
foram definidas como do tipo string e estão recebendo seus valores do controle DataTimePicker - dtpInicio e dtpFim - convertidos para string:
dtinicio = dtpInicio.Value.ToString
dtfim = dtpFim.Value.ToString
Os valores são usados nos parâmetros da instrução SQL:
cmd.Parameters.AddWithValue("@dtInicio",
dtinicio)
cmd.Parameters.AddWithValue("@dtFim", dtfim)
Finalmente criamos um DataReader e carregamos um objeto DataTable que é exibido no DataGridView - dgvFunci:
Using reader As SqlDataReader = cmd.ExecuteReader()
tabela.Load(reader)
dgvFunci.DataSource = tabela
End Using
Abaixo vemos um exemplo de execução bem sucedida para um intervalo de datas selecionado:
Note que eu não tive que me preocupar com o formato da data usada na consulta.
Se você definir as variáveis dtinicio e dtfim como do tipo DateTime não vai funcionar.
Pegue o projeto completo aqui: Obtendo_Dados_Entre_Duas_Datas.zip
Mateus 6:24 Ninguém pode servir a dois senhores; porque ou há de odiar a um e amar o outro, ou há de dedicar-se a um e desprezar o outro. Não podeis servir a Deus e às riquezas.
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. Veja também os Cursos com vídeo aulas e projetos exemplos: |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#