Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Leia dados do banco de dados sql usando seletor de data e hora


Vemos essas perguntas aqui todos os dias. Eles decorrem do mesmo problema.

NUNCA USE CONCATENAÇÃO DE STRING PARA CONSTRUIR CONSULTAS SQL.

É um grande problema. Claro que você já conheceu o primeiro efeito. Como converter strings de maneira aceitável para o tipo de dados efetivo? Você precisa resolver problemas de análise com aspas incorporadas, representação correta de datas e números decimais para o sistema de banco de dados subjacente. Mas o segundo e mais sutil efeito colateral da concatenação de strings é SQL Injection (Este é apenas um link instrutivo porque SQL Injection é um tópico muito grande)

Para resolver esse tipo de problema a única maneira aceita é usar PARÂMETROS.
Isso significa que é o mecanismo de banco de dados que resolve de maneira eficiente a questão, você precisa de uma string com placeholders de parâmetro (o @something) e um coleção de parâmetros com o tipo de dados exato para o valor do parâmetro.

Portanto, seu código deve mudar dessa maneira
Dim strSQL As String = "SELECT EMP_ID,EMP_NAME,AT_STATUS,AT_REMARK " + 
                       "FROM ATTENDANCE WHERE AT_DATE = @editdate " + 
                       "ORDER BY EMP_NAME ASC"
Using con = new SqlConnection("constring_here")
    con.Open()
    Using cmd = new SqlCommand(strSQL, con)
        cmd.Parameters.AddWithValue("@editdate", DTPEDITAT.Value)
        ' do whatever you want with the command '
        ' like ExecuteReader or use a DataAdapter to fill datasets'
    End Using
End Using