DUVIDAS VB.NET X SQL SERVER
esta consulta abaixo, fiz passa como filtro um textbox, depois joguei em um datareader e foi normal :
Sqlcmd = New SqlCommand([Ô]select data, placa,cto from cto where cto =[ô][Ô] & TextBox1.Text & [Ô][ô] [Ô], Cnn)
Ja esta outra que é entre intervalo de datas, tive que criar 2 variáveis e pegar o conteúdo de dois datetimepicker convertendo:
Dim dtinicio = dt1.Value.ToString
Dim dtfim = dt2.Value.ToString
Sqlcmd = New SqlCommand([Ô]select data, placa,cto from cto where data between @dtinicio and @dtfim order by data desc[Ô], Cnn)
Sqlcmd.Parameters.AddWithValue([Ô]@dtInicio[Ô], dtinicio)
Sqlcmd.Parameters.AddWithValue([Ô]@dtFim[Ô], dtfim)
Dr = Sqlcmd.ExecuteReader
If Dr.HasRows = False Then
Dim aviso As String
aviso = MessageBox.Show([Ô]Não ha dados para os parâmetros[Ô], [Ô]Aviso ao usuário[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
While (Dr.Read())
.....etc..
A dúvida, é que nesta consulta entre datas, só funcionou adicionando os 2 parameters....não daria pra fazer direto, formatando os datepickers na string sql ?
obs: as variaveis sqlcmd,dr, etc, ja estão declaradas como públicas na classe de conexão com o banco.
Sqlcmd = New SqlCommand([Ô]select data, placa,cto from cto where cto =[ô][Ô] & TextBox1.Text & [Ô][ô] [Ô], Cnn)
Ja esta outra que é entre intervalo de datas, tive que criar 2 variáveis e pegar o conteúdo de dois datetimepicker convertendo:
Dim dtinicio = dt1.Value.ToString
Dim dtfim = dt2.Value.ToString
Sqlcmd = New SqlCommand([Ô]select data, placa,cto from cto where data between @dtinicio and @dtfim order by data desc[Ô], Cnn)
Sqlcmd.Parameters.AddWithValue([Ô]@dtInicio[Ô], dtinicio)
Sqlcmd.Parameters.AddWithValue([Ô]@dtFim[Ô], dtfim)
Dr = Sqlcmd.ExecuteReader
If Dr.HasRows = False Then
Dim aviso As String
aviso = MessageBox.Show([Ô]Não ha dados para os parâmetros[Ô], [Ô]Aviso ao usuário[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
While (Dr.Read())
.....etc..
A dúvida, é que nesta consulta entre datas, só funcionou adicionando os 2 parameters....não daria pra fazer direto, formatando os datepickers na string sql ?
obs: as variaveis sqlcmd,dr, etc, ja estão declaradas como públicas na classe de conexão com o banco.
Até dá mas é um pouco mais complicado e chato para corrigir em casos de erro...
Claro que dá!
é que a consulta com o SQL Server usando datas é mais chatinha. Mas nada impossÃvel.
Na verdade o correto é verificar como seu SQL Server interpreta datas, ou se usa o formato (yyyy-MM-dd) ou (yyyy-dd-MM) e etc... Porém para você não ter esse trabalho mostre para o sql server como você quer a data.
No exemplo abaixo eu quero todos as colunas da tabela (minhatabela) cuja a data esteja entre o ano inteiro de 2015 exemplo:
Para o seu caso, basta trocar as datas para os campos do datetimepicker.
Espero que ajude!
Abraços
é que a consulta com o SQL Server usando datas é mais chatinha. Mas nada impossÃvel.
Na verdade o correto é verificar como seu SQL Server interpreta datas, ou se usa o formato (yyyy-MM-dd) ou (yyyy-dd-MM) e etc... Porém para você não ter esse trabalho mostre para o sql server como você quer a data.
No exemplo abaixo eu quero todos as colunas da tabela (minhatabela) cuja a data esteja entre o ano inteiro de 2015 exemplo:
SELECT * FROM minhatabela WHERE data BETWEEN CONVERT(datetime, [ô]01/01/2015[ô]) AND CONVERT(datetime, [ô]01/12/2015[ô])
Para o seu caso, basta trocar as datas para os campos do datetimepicker.
Espero que ajude!
Abraços
Amiga a resposta acima está certa porém esqueci de avisar. A partir da versão 2008 do SQL Server por padrão as datas segue o padrão: yyyy-MM-dd.
Ou seja? Para fazer a consulta basta digitar eles entre aspas simples sem usar a função CONVERT:
Ou seja? Para fazer a consulta basta digitar eles entre aspas simples sem usar a função CONVERT:
SELECT * FROM minhatabela WHERE data BETWEEN [ô]2015-01-01[ô] AND [ô]2015-01-31[ô]
So completar, essas ultima forma c a data dentro das aspas simples como string, so funciona c esse formato de data, pois vai trabalhar cvomo string mesmo
Off ae elseysanches, tmb sou de sa kkkk
Off ae elseysanches, tmb sou de sa kkkk
Existe as duas maneiras por parâmetros e injection. Sempre dê preferencia para parâmetros
SQL Inejction
SQL com parâmetros
SQL Inejction
Dim sSQL As String
sSQL = String.Format([Ô]SELECT DATA, PLACA, CTO [Ô] & _
[Ô]FROM CTO [Ô] & _
[Ô]WHERE DATA BETWEEN [ô]{0}[ô] AND [ô]{1}[ô] [Ô] & _
[Ô]ORDER BY DATA DESC[Ô], dt1.Value.ToString([Ô]yyyy-MM-dd[Ô]), dt2.Value.ToString([Ô]yyyy-MM-dd[Ô]))
Try
Sqlcmd = New SqlCommand(sSQL, Cnn)
Dr = Sqcmd.ExecuteReader()
If Dr.HasRows = False Then
MessageBox.Show([Ô]A pesquisa não retornou nenhuma informação[Ô], [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
[ô]Seu código aqui caso verdadeiro o resultado
...
End If
Catch ex As Exception
MessageBox.Show(ex.Message(), [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
SQL com parâmetros
Dim sSQL As String = [Ô]SELECT DATA, PLACA, CTO [Ô] & _
[Ô]FROM CTO [Ô] & _
[Ô]WHERE DATA BETWEEN @DATAINICIAL AND @DATAFINAL [Ô] & _
[Ô]ORDER BY DATA DESC[Ô]
Try
Sqlcmd = New SqlCommand(sSQL, Cnn)
Sqlcmd.Parameters.Add([Ô]DATAINICIAL[Ô], SqlDbType.Date).Value = dt1.Value
Sqlcmd.Parameters.Add([Ô]DATAFINAL[Ô], SqlDbType.Date).Value = dt2.Value
Dr = Sqcmd.ExecuteReader()
If Dr.HasRows = False Then
MessageBox.Show([Ô]A pesquisa não retornou nenhuma informação[Ô], [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
[ô]Seu código aqui caso verdadeiro o resultado
...
End If
Catch ex As Exception
MessageBox.Show(ex.Message(), [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Faça seu login para responder