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

Qu'est-ce que la transmission de paramètres à SQL et pourquoi en ai-je besoin ?

Passer des paramètres à SQL vous évite d'avoir à créer une chaîne SQL dynamique.

La création d'instructions SQL dynamiques représente un risque de sécurité ÉNORME, car les utilisateurs peuvent injecter leur propre code SQL dans votre application, exécutant éventuellement des commandes indésirables sur vos données.

Il existe de bons exemples d'attaques par injection SQL possibles sur :

Attaques par injection SQL par exemple

Il existe deux manières de transmettre des paramètres aux instructions SQL. La première consiste à utiliser des procédures stockées comme vous l'avez mentionné. L'autre consiste à utiliser des requêtes paramétrées (ce qui est en fait ce que je préfère).

Une requête paramétrée est en fait assez simple en .NET :

using(SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand command = 
        new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);

    command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));

    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();

    adapter.Fill(dt);
}

Dans cet exemple, le paramètre était @Username et nous avons utilisé les Parameters collection de SqlCommand objet à transmettre dans la valeur.