Je fais une requête vraiment simple dans asp.net, mais après avoir inséré la clause Exemple: P> comme code>, il cesse de fonctionner. String sql = " SELECT *
FROM Products
WHERE ID = @MYID
AND Name LIKE '%@MYNAME%' ";
SqlCommand command = new SqlCommand(sql, cn);
command.Parameters.AddWithValue("@MYID", MYID.Text);
command.Parameters.AddWithValue("@MYNAME", MYNAME.Text);
6 Réponses :
L'instruction SQL devrait ressembler à ceci: Je ne suis pas sûr que j'ai bien compris votre commentaire, mais il semble que vous souhaitiez utiliser la valeur d'une zone de texte dans votre requête - peut-être C'est ce que vous essayez de faire: p> "text_box" serait l'ID réel de votre contrôle de zone de texte. p> p>
Cela n'a pas fonctionné :( J'ai essayé et imprimez le SQL voir ci-dessous: et nom comme '% System.web.ui.webcontrols.textbox%'
La concaténation des valeurs SQL String est fausse (même si elle fonctionne): mauvaises performances dues à aucune réutilisation du plan de requête, le risque d'injection SQL, comme indiqué précédemment.
Injection SQL possible
ou et lorsque vous définissez le paramètre @myName, ajoutez les caractères "%" de manière appropriée (% Smith%). Je ne pense pas que vous avez besoin de citations simples lorsque vous traitez de paramètres. p> p>
Juste une note pour dire que l'utilisation d'une carte générique initiale est presque toujours une très mauvaise idée forte>, car la requête n'utilise aucun index sur cette colonne. Dans ce cas, vous pouvez probablement vous échapper car il semble que le filtre sur la colonne ID vous limitera à un enregistrement, mais de manière générale de ce que vous devez faire à la place, il est placé à la place d'un index de texte intégral dans la colonne Nom et écrivez la requête comme Ceci:
True tant que le texte que vous recherchez est un mot complet (ou des mots) ou le début d'un mot. Si vous recherchez du texte au milieu de ou à la fin d'un mot, vous devez malheureusement utiliser comme% S% code>.
Le code d'origine déroule le texte de l'instruction SQL avec le contenu du paramètre. Votre code devrait réellement ressembler à ceci:
string sql = "SELECT *
FROM Products
WHERE ID = @MyID
AND Name LIKE @MyName";
using (SqlCommand command = new SqlCommand(sql, cn))
{
command.Parameters.AddWithValue("@MyID", MyID.Text);
command.Parameters.AddWithValue("@MyName", "%" + MyName.Text + "%");
// Etc.
}
Cela ne fonctionnera pas correctement lorsque le myName.text contient les caractères% _ ou [ en supposant que vous souhaitez réellement rechercher l'une de ces littéraux de Charater. Pour une solution à 100%, vous devez envelopper ces caractères entre crochets []. Le code C # Regex.replace (Searchstring, @ "([% _ \ [])", @ "[1 $]") code> fait le truc. Merci à Matt Miller pour pointer cette sortie ici .
Il vous manque le signe % code> en suivant la valeur de paramètre de passage
Pas correct, le nom du paramètre n'a aucune incidence sur le motif similaire. Cela devrait être appliqué à la valeur de paramètre.
Ne pensez pas que l'utilisation d'un paramètre de liaison est comme l'insertion de sa valeur dans la chaîne SQL! Les valeurs de paramètres de liaison sont envoyées sous forme de données distinctes sur la base de données. Ils ne doivent donc pas être entre guillemets et ne peuvent pas non plus contenir de noms de code SQL, de table ou de colonne optionnels! P>
Désolé, je devais éditer la question. il a renvoyé 0 résultat même si dans @myName j'ai fourni la chaîne partielle correcte