sql >> Base de Datos >  >> RDS >> Sqlserver

Leer datos de la base de datos sql usando el selector de fecha y hora

Vemos estas preguntas aquí todos los días. Se derivan del mismo problema.

NUNCA USE LA CONCATENACIÓN DE CADENA PARA CREAR CONSULTAS SQL.

Es un gran problema. Por supuesto que ya has cumplido el primer efecto. ¿Cómo convertir cadenas de forma aceptable al tipo de datos efectivo? Debe resolver problemas de análisis con comillas incrustadas, representación correcta de fechas y números decimales para el sistema de base de datos subyacente. Pero el segundo y más sutil efecto secundario de la concatenación de cadenas es Inyección SQL (Este es solo un enlace instructivo porque SQL Injection es un tema muy amplio)

Para resolver este tipo de problemas, la única forma aceptada es usar PARÁMETROS.
Esto significa que es el motor de la base de datos el que resuelve de manera eficiente la pregunta, necesita una cadena con marcadores de posición de parámetros (el @algo) y un colección de Parámetros con el tipo de datos exacto para el valor del parámetro.

Entonces su código debería cambiar de esta manera

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