[C#/ASP.NET/SQL 2005] sqlDataSource qui picole

Je suis en train de finir une page de “surveillance” de sites. En gros, toutes les x minutes cette page de surveillance se déclenche, récupère les pages concernées, les scan à la recherche de mots-clés bien définis et, si elle en trouve, met à jour la base de données. Toute la partie “surveillance” marche sans soucis, je suis le plus heureux des hommes.

Mais là, je suis en train de finir la page d’administration, celle qui permet de rentrer de nouvelles pages à surveiller avec les mots clés en question. Elle se compose d’une textbox pour rentrer le nom de la page, l’url et d’un bouton envoyer. Ca, ca marche sans soucis. D’ailleurs, quand on ajoute une url, la dropdownlist (qui contient la liste de toutes les pages) se met à jour toute seule comme une grande. Ensuite, j’ai une autre textbox avec un bouton pour ajouter un autre mot clé. La pareil, ca marche a merveille.

Enfin, j’ai un repeater, bindé (en théorie) sur la table des mots clés. Vous l’avez déjà compris, c’est là que ca merde. En effet, il n’affiche jamais un seul mot clé de la liste. J’ai donc tenté un tas de trucs, comme par exemple de forcer un peu la main sur le SelectedIndexChanged du dropdown :

this.SqlDataSourceKeywords.SelectParameters["urlid"].DefaultValue = this.DropDownListUrls.SelectedValue; this.SqlDataSourceKeywords.DataBind(); this.RepeaterKeyword.DataBind();

D’ailleurs, le truc louche c’est que si je récupere un DataReader du SqlDataSourceKeywords.Select(), il ne contient rien. Nada. Pourtant, la valeur urlid est bien la bonne. Par contre, si je vais chercher avec la même requete toute conne (SELECT * FROM [Keywords] WHERE [urlid]=@urlid, dans l’idée) un datareader a grand coup de SqlConnection et SqlCommand, et que je le bind a la main sur le Repeater, il m’affiche tout du premier coup, comme il devrait.

J’ai l’impression que je passe a côté d’un truc tout con, qui expliquerait pourquoi ca marche pas en fait. Donc si vous avez une idée, je suis preneur.

Je corrige donc ce que j’ai écrit, apparement, c’est le sqldatasource qui picole très fort, puisqu’il ne trouve aucun enregistrement, alors que la base de donnée est la bonne, qu’il y a des entrées dedans, que la requete est bonne et que les parametres sont les bons aussi.

tu es sûr que ton DataSourceId est bien rempli sur ton repeater?

Sinon si je me rappelle bien, le repeater ne fait pas tout tout seul, il faut lui dire quoi faire:
exemple sur le pouce de la doc:

[quote]<asp:Repeater id=Repeater1 runat=“server”>






      <ItemTemplate>
         <tr>
            <td> <%# DataBinder.Eval(Container.DataItem, "Name") %> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
         </tr>
      </ItemTemplate>
         
      <FooterTemplate>
         </table>
      </FooterTemplate>
         
   </asp:Repeater>[/quote]
Company Symbol

[quote=“BodySplash, post:3, topic: 31191”]tu es sûr que ton DataSourceId est bien rempli sur ton repeater?

Sinon si je me rappelle bien, le repeater ne fait pas tout tout seul, il faut lui dire quoi faire:
exemple sur le pouce de la doc:[/quote]

Vivi, il est bien dessus. Le probleme semble en fait venir du sqldatasource qui picole très fort et qui ne renvoie rien avec la bonne requete. En parlant de ca, personne connait un moyen de savoir ce qui est envoyé au serveur SQL par un sqldatasource ?

Bah là je ne vois pas trop. Je donnerai juste les conseils habituels ^^ Vérifier sa chaîne de connexion, mettre des points d’arrêt partout (en s’abonnant aux évènements qui vont bien). Bref je suis plus ou moins convaincu qu’il s’agit d’une toute petite erreur planquée quelque part plutôt que le SqlDataSource qui part en sucette. D’ailleurs je me permet de souligner que niveau isolation des couches, les SqlDataSource c’est le mal.

C’est la bonne, elle marche super bien

Déjà fait, c’est comme ca que j’ai trouvé que c’était le datasource qui picole

Ah ca, moi je serais presque convaincu aussi, mais quand je voit que le resultat de sqldatasource.Select(dataselectargument.empty /* ou un truc du genre */) renvoie un enregistrement vide, alors qu’il a les bons parametres, je me pose légitimement des questions B)

Si tu parle du fait qu’on mélange du code avec du « graphisme » dans le sens ou c’est dans le désigner, c’est pas le mal. C’est pratique. C’est rapide. C’est pas chiant. Et je me permet de souligner que c’est pas la question :smiley:

Ceci dit, merci quand même pour la tentative de coup de main B)

Sql Profiler ? Et j’ai vraiment du mal à croire que le SqlDataSource soit buggé. A mon avis le profiler t’en dira bien plus sur ce qu’il se passe réellement.

Vi, Sql Profiler aurait pu m’aider. Hélas, j’ai la version express de SQL donc pas de profiler pour moi. Sinon, pour le SqlDataSource, j’ai refait un deuxieme sqldatasource en copiant/collant les parametres, et celui là marche. Incompréhensible, mais pb réglé du coup ;p

Tien je pense à un problème que j’ai eu à l’occasion en utilisant SqlServer.

Je ne pense pas que ce soit le problème ici, mais dans le doute, j’explique quand même B) J’avais créé les tables avec l’analyseur de requête avec mon compte, mais du coup, il m’avait mis comme propriétaire.
Là ou ça devient fourbe, c’est que les tables existaient également avec comme propriétaire dbo. J’avais mis des enregistrements à la main qui se sont retrouvés dans les tables dont j’étais propriétaire, mais du coup depuis l’appli web, qui elle tapait dans les tables dbo, bah mes requêtes ne retournaient rien.

EDIT: Pour revenir à ma précédente réponse, oui désolé tu n’as rien demandé sur l’isolation des couches :smiley: Mais je persiste et je signe en disant que c’est le mal, car ça a beau être pratique, ça rend le site moins maintenable AMHA B)

Pour un site de deux pages, dont une « d’administration »… Je pense que j’aurais pas besoin de faire des masses de maintenance. Sur une plus grosse appli, j’dis pas, mais pour des petits trucs comme ca, je vais pas me faire chier non plus. Ca existe, ca marche (bien), et fuck les conventions quand ca m’arrange :smiley: