DUVIDAS VB.NET X SQL SERVER

LIZA 13/01/2015 17:59:10
#443777
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.
MOUSER 13/01/2015 22:11:44
#443782
Até dá mas é um pouco mais complicado e chato para corrigir em casos de erro...
ESLEYSANCHES 14/01/2015 01:18:49
#443783
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:

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
ESLEYSANCHES 15/01/2015 00:13:52
#443820
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:

SELECT * FROM minhatabela WHERE data BETWEEN [ô]2015-01-01[ô] AND [ô]2015-01-31[ô]


NICKOSOFT 17/01/2015 06:26:49
#443855
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
FILMAN 17/01/2015 10:28:06
#443856
Existe as duas maneiras por parâmetros e injection. Sempre dê preferencia para 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