Datasource / commande select / paramètres

Résolu
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009 - 17 nov. 2009 à 14:19
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009 - 18 nov. 2009 à 15:28
Bonjour,

Je débute en asp.net. J'ai commencé un site web tout en asp. Sur une page j'ai créé un formulaire de recherche.
Les resultats sont afficher dans un gridview lié à une base de donnée oracle.

Je veux me servir des textbox et autres dropdownlist du formulaire de recherche comme des paramètre de la commande select de ma source de donnée.

Je me suis servit de ce tuto : http://www.aspfr.com/codes/CONSTRUCTION-SELECTCOMMAND_36050.aspx

Si j'utilise un paramètre (ex nom) la requete marche, si j'utilise 2, 3 ou plus de paramètres sa bugue et je ne sais pas pourquoi.

(Tout est en code behind a la demande de mon patron.)

Voici un extrait du code.

Protected Sub BtnRechercher_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnRechercher.Click
        Oim()
    End Sub

Protected Sub Oim()
        Dim Sc As String = ""
        Dim io As Integer = 0

        Me.OracleDataSource1.SelectParameters.Clear()
        Sc = "SELECT * FROM eleve"
        If DDLciv.SelectedValue <> -1 Then
            Me.OracleDataSource1.SelectParameters.Add("civ", DDLciv.SelectedValue)
            Sc Sc & " WHERE ((civ ?))"
            Me.OracleDataSource1.SelectParameters("civ").DefaultValue = DDLciv.SelectedValue
            io = 1
        End If
        If Not TBnom.Text = String.Empty Then
            Me.OracleDataSource1.SelectParameters.Add("nom", TBnom.Text)
            If io = 0 Then
                Sc Sc & " WHERE ((nom '?'))"
                io = 1
            Else
                Sc Replace(Sc, "))", ") AND (nom '?'))")
            End If
            Me.OracleDataSource1.SelectParameters("nom").DefaultValue = TBnom.Text
        End If
        If Not TBprenom.Text = String.Empty Then
            Me.OracleDataSource1.SelectParameters.Add("prenom", TBprenom.Text)
            If io = 0 Then
                Sc Sc & " WHERE ((prenom '?'))"
                io = 1
            Else
                Sc Replace(Sc, "))", ") AND (prenom '?'))")
            End If
            Me.OracleDataSource1.SelectParameters("prenom").DefaultValue = TBprenom.Text
        End If
Me.OracleDataSource1.SelectCommand = Sc
    End Sub


le code aspx correspondant :

" 
        ProviderName="<%$ ConnectionStrings:*******.ProviderName %>" 
         OnSelecting="BtnRechercher_Click"
        runat="server" >
    


Est ce que vous auriez une idée ?

Merci d'avance

c4sp

2 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 nov. 2009 à 12:26
Salut,

A première vue ta requête peut généré 2 fois une clause where (si prénom et nom sont renseignés en même temps) mais ce n'est pas cela qui cloche, ce qui ne vas pas c'est tes paramètres :

Me.OracleDataSource1.SelectParameters.Add("nom", TBnom.Text)
If io = 0 Then
Sc Sc & " WHERE ((nom '?'))"

Par contre, je ne suis pas un spécialiste Oracle, essaye simplement cela :

Me.OracleDataSource1.SelectParameters.Add("nom", TBnom.Text)
If io = 0 Then
Sc Sc & " WHERE ((nom @nom))"

je pense que lors ce que tu as une requête du type :

SELECT * FROM eleve WHERE ((civ ?) AND (nom ?))

Le serveur ne sait identifier seule quel paramètre correspond, par défaut il les prendra dans l'ordre, par contre ne met pas tes "?" entre apostrophes ('?'), car il les conciderera comme une chaîne de texte et non un paramètre.

Je te le redis, je ne suis pas expert oracle ni en syntaxe SQL, ce n'est que de simples supposition à tester.

++ Mayzz.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009
18 nov. 2009 à 15:28
Bonjour,

Tu n'es peux etre pas un expert en la matière, mais tu cherches a m'aider et j'apprécie.

Concernant la syntaxe de la requete je dois bien utiliser des " ? " car je me connecte via un pilote ODBC.

J'ai suivi ton conseil, j'ai enlevé les apostrophes qui entouraient les " ? " et sa marche.

J'aurai du y penser.
Merci
0
Rejoignez-nous