Je suis à la recherche d'un exemple de script. J'en ai vu un hier mais pour la vie de moi je ne peux plus le retrouver aujourd'hui. La tâche que j'ai est de permettre à l'utilisateur de rechercher 1 table de base de données via des contrôles de saisie sur une page ASPX où ils peuvent sélectionner et/ou combiner des champs, générer le sql à la volée avec concat/stringbuilder ou similaire . (Il court derrière le pare-feu corp)Un exemple de recherche de base de données avancée
S'il vous plaît quelqu'un peut me diriger dans la bonne direction d'un exemple ou tutoriel
Je travaille sur la page, mais ont des problèmes. Voici le Page_load;
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sql As String = ("Select * From Table Where ")
'variables to hold the and or values between fields
Dim andor1v As String = AndOr1.SelectedValue.ToString()
Dim andor2v As String = AndOr2.SelectedValue.ToString()
Dim andor3v As String = AndOr3.SelectedValue.ToString()
Dim andor4v As String = AndOr4.SelectedValue.ToString()
Dim andor5v As String = AndOr5.SelectedValue.ToString()
Dim andor6v As String = AndOr6.SelectedValue.ToString()
'variables to stop web control inputs going direct to sql
Dim name As String = NameSearch.Text.ToString()
Dim email As String = EmailSearch.Text.ToString()
Dim city As String = CitySearchBox.Text.ToString()
Dim province As String = ProvinceSelect.SelectedValue.ToString()
Dim qualifications As String = QualificationsObtained.Text.ToString()
Dim competencies As String = CompetenciesDD.SelectedValue.ToString()
Dim expertise As String = Expertiselist.SelectedValue.ToString()
If NameSearch.Text IsNot String.Empty Then
sql += "Surname LIKE '%" & name & "%' "
End If
If EmailSearch.Text IsNot String.Empty Then
sql += andor1v & " Email LIKE '%" & email & "%' "
End If
If CitySearchBox.Text IsNot String.Empty Then
sql += andor2v & " City LIKE '%" & city & "%' "
End If
If QualificationsObtained.Text IsNot String.Empty Then
sql += andor3v & " (institutionquals1 LIKE '%" & qualifications & "%') OR " & _
"(institutionquals2 LIKE '%" & qualifications & "%') OR " & _
"(institutionquals3 LIKE '%" & qualifications & "%') OR " & _
"(institutionquals4 LIKE '%" & qualifications & "%') "
End If
Dim selectedrow As String = CompetenciesDD.SelectedValue.ToString
Dim selectedquals As String = NQFlevel.SelectedValue.ToString
If CompetenciesDD.SelectedValue.ToString IsNot "0" And selectedquals = 0 Then
sql += (selectedrow & " = 1 ")
ElseIf selectedrow = "assessortrue" And selectedquals IsNot "0" Then
sql += andor4v & (" assessortrue=1 and assessorlvl=" & selectedquals)
ElseIf selectedrow = "coordinatortrue" And selectedquals IsNot "0" Then
sql += andor4v & ("coordinatortrue=1 and coordinatorlvl=" & selectedquals)
ElseIf selectedrow = "facilitatortrue" And selectedquals IsNot "0" Then
sql += andor4v & ("facilitatortrue=1 and facilitatorlvl=" & selectedquals)
ElseIf selectedrow = "moderatortrue" And selectedquals IsNot "0" Then
sql += andor4v & ("moderatortrue=1 and moderatorlvl=" & selectedquals)
ElseIf selectedrow = "productdevelopertrue" And selectedquals IsNot "0" Then
sql += andor4v & ("productdevelopertrue=1 and productdeveloperlvl=" & selectedquals)
ElseIf selectedrow = "projectmanagertrue" And selectedquals IsNot "0" Then
sql += andor4v & ("projectmanagertrue=1 and projectmanagerlvl=" & selectedquals)
End If
Response.Write(sql)
End Sub
Après une heure de bricoler le code cherche maintenant comme il le fait ci-dessus^
Maintenant im problème face à est si un utilisateur ne saisit pas de valeur pour le nom (le premier champ) mais ne pénètre une valeur pour l'email (ou n'importe quels champs suivants), le sql produit a un extra et comme ceci;
Select * From Table Where And Email LIKE '%test%'
Je suis également à la recherche d'un moyen de prendre en compte l'option OU. Pensez-vous que cela devrait être fait comme Martin dit où toute la requête est soit un et/ou un et/ou pas un mélange des 2? Ensuite, je devrais être en mesure de sortir tous les et/ou déroulants?
Merci. NB: Je ne suis pas vraiment à la recherche de commentaires sur la façon dont je devrais paramétrer ou sur l'injection de SQL. La concaténation de chaînes pour créer une requête n'est jamais une bonne idée.
Vous aurez certainement envie de remplacer "à « » peu importe combien vous faites confiance à vos utilisateurs comme ils recherchent O'Reilly il se brisera. Voir aussi Injection SQL. –
quels problèmes avez-vous? cela ressemble à la "qualité" SQL dynamique mais il semble manquer une certaine logique, pouvez-vous poster plus de code? – andrewWinn
@andrewWin. ont posté du code complet et plus d'infos sur le prob, merci. – Phil