Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Lire les données de la base de données sql à l'aide du sélecteur datetime

Nous voyons ces questions ici tous les jours. Ils découlent du même problème.

N'UTILISEZ JAMAIS LA CONCATÉNATION DE CHAÎNES POUR CONSTRUIRE DES REQUÊTES SQL.

C'est un gros problème. Bien sûr, vous avez déjà rencontré le premier effet. Comment convertir des chaînes de manière acceptable en type de données effectif ? Vous devez résoudre des problèmes d'analyse avec des guillemets intégrés, une représentation correcte des dates et des nombres décimaux pour le système de base de données sous-jacent. Mais le deuxième effet secondaire et plus subtil de la concaténation de chaînes est Injection SQL (Ceci est juste un lien instructif car l'injection SQL est un sujet très vaste)

Pour résoudre ce genre de problèmes, la seule manière acceptée est d'utiliser PARAMETERS.
Cela signifie que c'est le moteur de base de données qui résout de manière efficace la question, vous avez besoin d'une chaîne avec des paramètres fictifs (le @something) et un collection de paramètres avec le type de données exact pour la valeur du paramètre.

Votre code devrait donc changer de cette façon

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