Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Leggi i dati dal database sql utilizzando il selettore datetime

Vediamo queste domande qui ogni giorno. Nascono dallo stesso problema.

NON UTILIZZARE MAI LA CONCATENAZIONE DI STRINGE PER COSTRUIRE QUERY SQL.

È un grosso problema. Ovviamente hai già incontrato il primo effetto. Come convertire le stringhe in modo accettabile nel tipo di dati effettivo? È necessario risolvere i problemi di analisi con le virgolette incorporate, la corretta rappresentazione di date e numeri decimali per il sistema di database sottostante. Ma il secondo e più sottile effetto collaterale della concatenazione di stringhe è SQL Injection (Questo è solo un collegamento istruttivo perché SQL Injection è un argomento molto ampio)

Per risolvere questo tipo di problemi l'unico modo accettato è usare PARAMETERS.
Ciò significa che è il motore di database che risolve in modo efficiente la domanda, è necessaria una stringa con i segnaposto dei parametri (il @qualcosa) e un raccolta di parametri con il tipo di dati esatto per il valore del parametro.

Quindi il tuo codice dovrebbe cambiare in questo modo

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