如何SQL SELECT&用代码循环遍历每行结果?

时间:2010-08-19 22:55:28

标签: c# asp.net visual-studio sql-server-2005

我正在尝试在c#中简单地从SQL DB中提取一组行并运行每一行我得到一些代码,这些代码将为我返回的每一行发送一次电子邮件。

下面的代码应该尽我所知并且不会返回错误,我很难过。你可以假设“ConnectionString”是有效的,并且在网站上的很多地方使用,并且那里定义的查询肯定应该从我的数据库返回一行,因为我通过运行它来验证完全相同的行。使用sql mgmt studio express的原始数据库,我得到了我期待的结果。

所有我得到的只是在我尝试进入循环之前发生的单个“我在这里”电子邮件。

非常感谢聪明人提出的任何见解,谢谢你们!

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("no-reply@local.com");
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("no-reply@local.com");
            message252.To.Add(new MailAddress("myemailaddress"));
            message252.Body = "AND THEN I GOT HERE TOO - " + watcher;
            SmtpClient client252 = new SmtpClient();
            client252.Send(message252);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

以下是有关如何调试代码的一些提示。请不要将其作为完整指南 - 通过阅读正确的介绍,您可以了解很多关于调试的知识。但是,这可能会让你在你现在遇到的特定问题上更进一步。

  • 将光标移动到代码中的某个位置您认为可能存在问题的位置。 (在您的示例中,转到第一行。从顶部开始。)
  • 按F9。该线将变为红色。这称为“断点”:它告诉Visual Studio,当程序到达这一点时,你想要在这里停止。
  • 按F5。这运行你的程序。在程序中执行任何必要的操作,使程序达到红线(断点)的程度。
  • 您会注意到Visual Studio突然出现在顶端。红色的线现在是黄色的。这是因为它是当前正在执行的行。该程序已经停在这里,您现在可以检查它从此开始的运行方式。
  • 按F10。您会注意到黄色线将按下一个命令。多次按F10键,它将逐行完成代码。
  • 在每个点上,您可以将鼠标悬停在变量上。您会注意到它会显示每个变量的值是什么。
  • 如果您认为自己发现了错误,并且需要编辑代码,请按Shift + F5。这会杀死该程序。然后,您可以编辑代码并再次按F5以运行已编辑的版本。
  • 如果您不再需要断点,只需在同一行再次按F9,它就会消失。

同时查看“调试”菜单及其“Windows”子菜单,同时单步执行程序(即某处某处有黄线)。如果您想尝试和玩,请尝试这些,尤其是“Autos”,“Locals”和“Call Stack”。玩得开心!

答案 1 :(得分:0)

以下是一些可能有帮助的建议......

  1. 您是否在控制台应用中运行此功能?如果是这样,请用Console.WriteLine(“Some Text”)替换发送的电子邮件,这可以帮助您在不使用调试器的情况下查看代码的位置。

  2. 您已从订阅者中选择前1 * ...您确定查询是否返回结果?