Comment utiliser les paramètres SQL pour obtenir des données de SQL Server
Je suis en train de travailler sur un projet C# et je suis nouveau sur cette technologie.
Je veux lire des données à partir de SQL Server 2008, et j'écris le code suivant
public User select(string username, string password)
{
string connection = ConfigurationManager.ConnectionStrings["lawyersDBConnectionString"].ConnectionString.ToString();
string sql = string.Format("select * from users where userName = '{0}' and password = '{1}'", username, password);
SqlConnection con = new SqlConnection();
con.ConnectionString = connection;
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
User user = new User();
DataRow dr;
try
{
da.Fill(ds);
dr = ds.Tables[0].Rows[0];
user.Id = Convert.ToInt16(dr["userID"]);
user.FirstName = (string)dr["firstName"];
user.LastName = (string)dr["lastName"];
user.Email = (string)dr["email"];
user.Username = (string)dr["userName"];
user.Password = (string)dr["password"];
user.type = (string)dr["type"];
return user;
}
catch (Exception ex)
{
return null;
}
}//end of select method
Mais j'avais lu un article sur l'injection SQL, et je veux utiliser les paramètres SQL pour éviter cela, mais je ne sais pas comment.
Reportez-vous à la réponse de Steve, c'est la bonne. Mais attention à la façon dont il utilise le
using
états à s'assurer que tous les objets soient éliminés correctement - c'est important.OriginalL'auteur Fadi Khalil | 2013-09-11
Vous devez vous connecter pour publier un commentaire.
C'est un simple retravailler sur votre code. Pas testé, mais en gros, ça consiste en l'ajout de la instruction d'utilisation autour du jetable, les objets et l'utilisation de SqlCommand avec sa collection de paramètres
Remarquez comment le texte de la commande ne contient pas directement les cordes pour l'utilisateur et le mot de passe mais un simple paramètre de l'espace réservé
(@uname and @pwd)
. Ces espaces sont appelés les paramètres de nom lors de l'ajout de paramètres pour la SqlCommand collection.À la recherche, à l'utilisation de ces données récupérées, je vous suggère fortement de regarder de simples outils ORM comme Dapper qui pourrait traduire directement tout ce code dans l'objet Utilisateur
Parfaitement mis en œuvre
OriginalL'auteur Steve
Assez intéressant, la façon de Chaîne.Œuvres en Format n'est pas très différent de paramètres SQL. La seule vraie différence, c'est que vous spécifiez le type de données de chaque paramètre est ce qui permet à l'SQLCommand pour bien désinfecter (lire: prévenir l'injection sql) de l'utilisateur de votre entrée.
Voici un exemple de comment vous pourriez modifier votre code pour utiliser des Paramètres SQL.
Quelques choses que je voudrais souligner:
OriginalL'auteur Spencer Ruport