2010-08-19 6 views
1

J'essaye dans C# de tirer simplement un ensemble de rangées d'une base de données SQL et d'exécuter chaque rangée que j'obtiens un résultat avec du code qui m'enverra un email une fois pour chaque rangée retournée.comment SQL SELECT et boucle à travers chaque ligne de résultats avec le code?

le code ci-dessous devrait fonctionner aussi loin que je peux dire et ne renvoie aucune erreur, je suis perplexe. Vous pouvez supposer que "ConnectionString" est valide et utilisé dans beaucoup d'endroits sur le site, et que la requête telle qu'elle est définie ici devrait définitivement renvoyer une ligne de ma base de données, car j'ai vérifié exactement la même ligne en l'exécutant la DB brute avec sql mgmt studio express et j'obtiens les résultats que j'attends. Tout ce que je reçois, c'est le simple "je suis arrivé ici" email qui arrive juste avant que j'essaie d'entrer dans la boucle.

Apprécierait vraiment toute idée de personnes plus intelligentes, merci les gars!

string query4 = "SELECT TOP(1)* FROM subscribers WHERE subscriber = 'test'"; 

string number; string pix; string watcheremail; string watcher; 

MailMessage message25 = new MailMessage(); 
message25.From = new MailAddress("[email protected]"); 
message25.To.Add(new MailAddress("myemailaddress")); 
message25.Body = "i got here"; 
SmtpClient client25 = new SmtpClient(); 
client25.Send(message25); 
using (SqlConnection connection = new SqlConnection("ConnectionString")) 
{ 
    connection.Open(); 
    using (SqlDataAdapter people = new SqlDataAdapter(query4, connection)) 
    { 
     DataTable people1 = new DataTable(); 
     people.Fill(people1); 

     foreach (DataRow row in people1.Rows) 
     { 
      watcher = row["subscriber"].ToString(); 
      MailMessage message252 = new MailMessage(); 
      message252.From = new MailAddress("[email protected]"); 
      message252.To.Add(new MailAddress("myemailaddress")); 
      message252.Body = "AND THEN I GOT HERE TOO - " + watcher; 
      SmtpClient client252 = new SmtpClient(); 
      client252.Send(message252); 
     } 
    } 
} 
+0

Avez-vous essayé de parcourir le code dans un débogueur? En outre, des exceptions sont-elles interceptées/enregistrées n'importe où? –

+0

déboguer? Êtes-vous en train de faire le tour de la boucle pour voir ce qui se passe? –

+0

Je suppose que je devrais mentionner que je suis un novice, très nouveau à tout cela et à l'enseignement moi-même. Je ne sais pas comment lancer un débogueur ou quelque chose comme ça. l'e-mail dans la boucle est ma méthode de "boucler la boucle" et cet email ne m'atteint jamais, ce qui signifie que je n'entrerai pas du tout dans la boucle – korben

Répondre

2

Voici quelques conseils sur la façon de déboguer votre code. S'il vous plaît ne prenez pas cela comme un guide complet - il ya beaucoup que vous pouvez apprendre sur le débogage en lisant une introduction appropriée. Mais cela pourrait vous amener un peu plus loin dans votre problème particulier que vous avez en ce moment.

  • Déplacez votre curseur sur un endroit dans le code avant l'endroit où vous pensez qu'il pourrait y avoir un problème. (Dans votre exemple, passez à la première ligne et commencez par le haut.)
  • Appuyez sur F9. La ligne deviendra rouge. C'est ce qu'on appelle un "point d'arrêt": il indique à Visual Studio que vous voulez vous arrêter ici lorsque le programme atteint ce point.
  • Appuyez sur F5. Cela lance votre programme. Faites tout ce qui est nécessaire dans votre programme pour obtenir le programme au point où vous avez la ligne rouge (le point d'arrêt).
  • Vous remarquerez que Visual Studio arrive soudainement au sommet. La ligne qui était rouge est maintenant jaune. C'est parce que c'est la ligne en cours d'exécution. Le programme s'est arrêté juste ici, et vous pouvez maintenant examiner comment il fonctionne à partir de ce point.
  • Appuyez sur F10. Vous remarquerez que la ligne jaune descendra une commande. Appuyez sur F10 plusieurs fois et il passera par le code ligne par ligne.
  • À chaque point, vous pouvez passer la souris sur les variables. Vous remarquerez qu'il vous montre quelle est la valeur de chaque variable.
  • Lorsque vous pensez avoir trouvé le bogue et que vous devez le modifier, appuyez sur Maj + F5. Cela va tuer le programme. Vous pouvez ensuite modifier votre code et appuyez à nouveau sur F5 pour exécuter la version modifiée.
  • Si vous n'avez plus besoin d'un point d'arrêt, appuyez de nouveau sur F9 sur la même ligne, et il disparaîtra.

ont également un regard sur le menu « Debug » et le sous-menu « Windows », pendant que vous le programme de la progression dans (à savoir quand il y a quelque part une ligne jaune). Si vous aimez expérimenter et jouer, essayez-les, en particulier "Autos", "Locals" et "Call Stack". S'amuser!

0

Voici quelques suggestions qui pourraient aider ...

  1. Êtes-vous en cours d'exécution dans une application de cette console? Si c'est le cas, remplacez l'envoi d'e-mail avec Console.WriteLine ("Some Text"), et cela peut vous aider à voir où le code est obtenu sans utiliser de débogueur.

  2. Vous avez sélectionné le top 1 * parmi les abonnés ... Êtes-vous sûr que la requête renvoie des résultats?

+0

1. Non, je l'exécute comme un ASPX sur une page Web 2. Oui, je suis sûr qu'il retourne les résultats – korben

+0

Depuis votre sur une application Web, vous pouvez remplacer ma recommandation d'utiliser "Console.WriteLine" avec "Réponse. Write "pour afficher les informations de débogage. C'est la façon de déboguer d'un pauvre. :) – ctorx

Questions connexes