Inclure la zone de texte valeur dans la Requête SQL
Je suis en train de rechercher un GridView à l'aide d'une zone de texte et le bouton de recherche. Je pense que j'ai besoin d'une requête quelque chose comme
SELECT employeeID, name, position, hourlyPayRate
FROM dbo.employee
WHERE name LIKE 'textBox1.text+'
J'ai fait la requête à l'aide du concepteur de requêtes dans visual studio 2013.
J'ai ensuite un gestionnaire d'événements comme cette
private void btnSearch_Click(object sender, EventArgs e)
{
this.employeeTableAdapter.FillBy(this.personnelDataSet.employee);
}
Je suis sûr que le problème est dans la requête, mais je ne sais pas comment inclure la valeur de la textbox dans la requête.
- Pourquoi les gens insistent sur l'utilisation de
DataTable
etc? Pensez à les chatons! Aussi: ne jamais jamais concaténer d'entrée... - oui, très mauvais joo joo. Votre uni professeurs méritent d'être moqué. Laissez les Juifs, bien ;p
- haha je viens de sonner à la sortie!
Vous devez vous connecter pour publier un commentaire.
De simplement changer votre requête, il devrait ressembler à:
Mais ce est vulnérable à l'injection SQL, vous devez utiliser un SqlCommand avec paramètres:
Mise à jour:
Pour exécuter ce code sur le clic d'un bouton, placez le code ici (assurez-vous de l'avoir un bouton avec le nom
YourButton
):Update2:
Vous devriez avoir une chaîne de connexion à utiliser en l'occurrence de SqlConnection, cette chaîne pourrait ressembler à quelque chose comme:
Ici, vous aurez à remplacer les valeurs de départ avec
my
avec vos propres valeurs. Plus d'infos/exemples sur connectionstrings pour SQL Server:[Position]
dans la requête.ExecuteNonQuery
, mon mauvais.Comme makambi déjà dit. Vous ne devriez pas le faire comme ça parce que vous êtes à l'ouverture des portes pour l'injection SQL. Plutôt utiliser des requêtes paramétrées comme ceci:
ou utiliser un stockées procédures.
Comme un mineur de côté; ici est une approche alternative qui montre comment le faire en évitant la surcharge de
DataTable
etc, et avec simple mais efficace et sécuritaire de paramétrage et de matérialisation:Où la clause where name LIKE textBox1.texte + 'reste de la requête'
Mais comme makambi mentionne, la façon dont votre e la construction de la requête vous ouvrir à l'injection sql
Si j'ai bien compris à droite, vous créer manuellement votre requête sql. C'est une mauvaise pratique de le faire avec la plaine de concaténation de chaîne, parce qu'il rend possible des injections SQL, vous devez plutôt utiliser SqlCommand syntaxe et juste ajouter SqlParameters en elle.
Ce n'est pas vraiment testé, et il peut ne pas fonctionner comme il est, mais il décrit et idée. Vous venez d'ajouter des paramètres avec sql type dont vous avez besoin, veuillez voir plus d'exemples ici: Quand faut "SqlDbType" et "taille" être utilisé lors de l'ajout SqlCommand Paramètres?