2009-11-20 4 views
0

J'écris une page ASP.NET 2.0 dans VS2008. Dans ma méthode Page_Load j'ai les éléments suivants:Utilisation de SqlDataAdapter dans une page ASP.NET

DataTable table = new DataTable(); 
SqlDataAdapter adapter = new SqlDataAdapter(); 

using (SqlConnection connection = new SqlConnection(conString)) { 
    using (SqlCommand command = new SqlCommand(cmdString, connection)) { 
     adapter.SelectCommand = command; 
     rowCount = adapter.Fill(table); 
    } 
} 

Qu'est-ce que j'ai fait de mal?

La première fois que j'exécute la page, cela fonctionne très bien (Fill retourne une ligne). Si j'exécute (Debug) la page une deuxième fois, je reçois zéro rangées. De même, si la page est en cours d'exécution, et que je modifie l'un des paramètres de l'URL pour que la chaîne cmdString change, je reçois zéro ligne. Si je fais un changement de code trivial pour forcer une recompilation, la page fonctionnera à nouveau.

+0

Pouvez-vous nous montrer la chaîne de commande et tous les paramètres que vous utilisez. – Phaedrus

+0

sélectionnez r.GUID, r.ACTION, wan.FriendlyActionName, r.EffectiveDate, P.FirstName, P.LastName, s.status, s.ITRComment, s.ManagerComment à partir de demandes r rejoindre le statut s sur r.requestnum = s.requestnum gauche rejoindre workflowactionnames wan sur r.action = wan.action jointure gauche profil p = sur p.profileuid r.guid où r.requestnum = un entier

+0

Comment peuplez-vous 'un entier? Êtes-vous certain qu'il contient une valeur sur chaque chargement? Le code actuel serait le plus utile ici. – Phaedrus

Répondre

0

Mon cmdString avait portée la page, et je remplissais un paramètre avec + = au lieu de String.Replace ou (de façon plus judicieuse) en utilisant un SqlParameter, il a été mutilé à chaque tentative après la première. Je suppose que le serveur Web incorporé dans VS conserve l'objet de page en vie même lorsque vous arrêtez le débogueur, ce qui explique pourquoi cela ne fonctionnerait qu'une seule fois après chaque changement de code. Phidrus a demandé à nouveau: "Êtes-vous certain qu'il contient une valeur sur chaque charge?"

0

Avez-vous utilisé ceci dans votre événement Page_Load?

if(!Page.IsPostBack) 
{ 
    YourBindDateMethod(); 
} 
+0

Je dois avouer que je ne comprends pas très bien. Est-ce que YourBindDate est une méthode .NET? Que devrait-il faire? –

+0

Fondamentalement, YourBindDataMethod() est ce que Ricardo a écrit à l'intérieur de son instruction if. – Chris

0

Il semble que le code ci-dessus est en cours d'exécution en cas Page_Load ... et il ne fonctionne que la première fois que le chargement de la page ... Avez-vous le code ci-dessus dans une déclaration comme ça?

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     DataTable table = new DataTable(); 
     SqlDataAdapter adapter = new SqlDataAdapter(); 

     using (SqlConnection connection = new SqlConnection(conString)) 
     { 
      using (SqlCommand command = new SqlCommand(cmdString, connection)) 
      { 
       adapter.SelectCommand = command; 
       rowCount = adapter.Fill(table); 
      } 
     } 

    } 
} 
+0

Oui, il s'agit de l'événement Page_Load. J'ai essayé d'ajouter cette ligne, et les résultats sont les mêmes. Le code s'exécute chaque fois que la page se charge, mais sur chaque chargement suivant le premier, zéro lignes sont renvoyées à partir de remplissage. –

+0

Exactement ... vous devez donc le déplacer en dehors de l'instruction if (! IsPostBack) ... de cette façon, votre code s'exécutera à chaque chargement du formulaire. En ce moment, il ne s'exécute que la première fois que le formulaire se charge, c'est pourquoi vous n'obtenez aucune donnée la prochaine fois que la page se charge. –

Questions connexes