【问题标题】:How to iterate through the table and get the value of a cell? (MVC)如何遍历表格并获取单元格的值? (MVC)
【发布时间】:2018-05-02 06:20:29
【问题描述】:

我有一个名为 "Events" 的表,其中有分别名为 'EquipID''EmailSent' 的列。

插入数据时,'EmailSent' 的默认值为 "no"。现在我必须运行一个查询来遍历每一行是否已根据值发送电子邮件。如果查询读取 'no',那么我必须执行 SMTP 函数,根据相应的 'EquipID' 向它发送邮件,我必须在其中获取它的单元格值。如果查询改为 'yes',则可以跳过一行。

现在我不知道如何调用表并查询迭代以获取单元格的值,仅当 'EmailSent' 的值为 'no' >.

我已将表格designdata 附在一起。

到目前为止,我做过类似的事情。

        con.Open();
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
        {
            //replace this with your query
            using (var command = new SqlCommand("SELECT EventID, EquipID, EmailSent FROM Events", con))
            {
                con.Open();
                using (var reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            if (reader["EmailSent"].ToString() == "no")
                            {

                                string IDIDID = reader["EquipID"].ToString();
                                //add your function to send email


                                string sqlView = "SELECT * FROM [NewEquipment] INNER JOIN [User] ON [NewEquipment].[UserID] = [User].[UserID] WHERE EquipID = '" + IDIDID + "'";
                                using (SqlCommand yes = new SqlCommand(sqlView, con))
                                {
                                    SqlDataReader read = yes.ExecuteReader();
                                    if (read.Read())
                                    {
                                        string UserEmail = read["UserEmailAdd"].ToString();
                                        string UserFullName = read["UserFullName"].ToString();

                                        string EquipIDID = read["EquipID"].ToString();
                                        string ModelNo = read["ModelNo"].ToString();
                                        string ModelDesc = read["ModelDesc"].ToString();
                                        string CalType = read["CalType"].ToString();

                                        string CalDate = read["EquipCalDueDate"].ToString();
                                        DateTime caldate = DateTime.Parse(CalDate);
                                        string DateDate = caldate.ToString("MM-dd-yyyy");

                                        MailMessage mail = new MailMessage();
                                        mail.To.Add(UserEmail);
                                        mail.From = new MailAddress("keysight@keysight.com");
                                        mail.Subject = "Reminder on Equipment's Cal Due Date";
                                        mail.IsBodyHtml = true;
                                        string Body = "Greetings " + UserFullName + "<br/><br/>This email is to remind you that you have " + "<b>10 days </b>" + "left before you can send the equipment for calibration. Below are the details of the respective equipment: " +
                                            "<br/><br/>Equipment ID: " + EquipIDID + "<br/>Model No.: " + ModelNo + "<br/>Model Description: " + ModelDesc + "<br/>Cal Type: " + CalType + "<br/>Equipment Status: " + "<b>CRITICAL</b>" +
                                            "<br/>Equipment Cal Due Date: " + DateDate + "<br/><br/>Thank you." + "<br/><br/>Regards," + "<br/>Keysight Technologies";
                                        mail.Body = Body;

                                        SmtpClient smtp = new SmtpClient();
                                        smtp.Host = "smtp.cos.is.keysight.com";
                                        smtp.Port = 25;

                                        smtp.Send(mail);
                                    }
                                    read.Close();
                                    con.Close();
                                }

                            }
                        }
                    }
                }
            }
        }
        con.Close();

【问题讨论】:

  • 学习如何查询数据库是一个很好的目标。不幸的是,StackOverflow 不是一个教程网站。好消息是那里有“数不胜数”的网站可以提供您需要的指导。
  • 您没有提供任何有关您检索数据的技术的信息...例如,您是否使用实体框架?
  • 是的,我正在使用实体框架模型来调用其他页面 Hooman 中的数据库。
  • var results = db.Events.Where(x =&gt; x.EmailSent == "no").Select(x =&gt; x.EquipID); 将为您提供所有EquipID 的集合,其中EmailSent == "no"

标签: sql asp.net-mvc datatable iterator local-database


【解决方案1】:
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MVCConnectionString"].ConnectionString))
            {
                //replace this with your query
                using (var command = new SqlCommand("SELECT eventid,eqipid,emailsent FROM TableName", connection))
                {
                connection.Open();
                using (var reader = command.ExecuteReader()){
                       if(reader.HasRows){
                             while(reader.Read()){
                                  if (reader["emailsent"].ToString()=="NO"){
                                   //add your function to send email

                             }
                       }
                }
                 }
            }

【讨论】:

  • 感谢@Ajay,我已经尝试过您的代码,但看起来 [while (reader.Read())] 出现了某种错误。它显示“阅读器关闭时调用读取的尝试无效。”我已经更新了上面的代码以供您查看。请看一下。非常需要您的帮助。谢谢。
  • 我可以知道您使用的是哪个数据库吗?那是 SQL Server 吗?
  • 我正在使用本地数据库@Ajay。这是.mdf
  • 好的,我现在的建议是,请确保您先连接到数据库。检查是否 SqlConnection con != null。如果为真,尝试从 db 中选择一个示例表,这可以通过 SqlDataReader reader = command.ExecuteReader() 完成,如果它成功从 db 获取一些数据,那么我们可以考虑迭代结果
  • 是的,连接有效@Ajay,我删除了 while(reader) 并保留了其他所有内容。在此代码之后,字符串 IDIDID = reader["EquipID"].ToString();我输入了这个以确保它有效,ViewBag.show = IDIDID;
【解决方案2】:

谢谢你们的帮助。我找到了答案。我已经附在下面了。

using (var con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\MyDatabase.mdf;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"))
        {
            using (var command = con.CreateCommand())
            {
                command.CommandText = "SELECT EventID, EquipID, EmailSent, EquipCalDueDate, ThemeColor FROM Events";

                con.Open();
                using (var reader = command.ExecuteReader())
                {
                    var indexOfColumn1 = reader.GetOrdinal("EventID");
                    var indexOfColumn2 = reader.GetOrdinal("EquipID");
                    var indexOfColumn3 = reader.GetOrdinal("EmailSent");
                    var indexOfColumn4 = reader.GetOrdinal("EquipCalDueDate");
                    var indexOfColumn5 = reader.GetOrdinal("ThemeColor");

                    while (reader.Read())
                    {
                        var value1 = reader.GetValue(indexOfColumn1);
                        var value2 = reader.GetValue(indexOfColumn2);
                        var value3 = reader.GetValue(indexOfColumn3);
                        var value4 = reader.GetValue(indexOfColumn4);
                        var value5 = reader.GetValue(indexOfColumn5);

                        if (value5.ToString() == "red" && value3.ToString() == "no") {
                            string sqlView = "SELECT * FROM [NewEquipment] INNER JOIN [User] ON [NewEquipment].[UserID] = [User].[UserID] WHERE EquipID = '" + value2.ToString() + "'";
                            using (SqlCommand yes = new SqlCommand(sqlView, con))
                            {
                                SqlDataReader read = yes.ExecuteReader();
                                if (read.Read())
                                {
                                    string UserEmail = read["UserEmailAdd"].ToString();
                                    string UserFullName = read["UserFullName"].ToString();                                        string EquipIDID = read["EquipID"].ToString();
                                    string ModelNo = read["ModelNo"].ToString();
                                    string ModelDesc = read["ModelDesc"].ToString();
                                    string CalType = read["CalType"].ToString();                                        string CalDate = read["EquipCalDueDate"].ToString();

                                    DateTime Edate = DateTime.Parse(CalDate);
                                    double remainingDays = (Edate - DateTime.Now).TotalDays;
                                    int rDays = (int)Math.Round(remainingDays, MidpointRounding.AwayFromZero);

                                    MailMessage mail = new MailMessage();
                                    mail.To.Add(UserEmail);
                                    mail.From = new MailAddress("keysight@keysight.com");
                                    mail.Subject = "Reminder on Equipment's Cal Due Date";
                                    mail.IsBodyHtml = true;
                                    string Body = "Greetings " + UserFullName + "<br/><br/>This email is to remind you that you have " + "<b>"+ rDays + " days </b>" + "left before you can send the equipment for calibration. Below are the details of the respective equipment: " +
                                        "<br/><br/>Equipment ID: " + EquipIDID + "<br/>Model No.: " + ModelNo + "<br/>Model Description: " + ModelDesc + "<br/>Cal Type: " + CalType + "<br/>Equipment Status: " + "<b>CRITICAL</b>" +
                                        "<br/>Equipment Cal Due Date: " + CalDate + "<br/><br/>Thank you." + "<br/><br/>Regards," + "<br/>Keysight Technologies";
                                    mail.Body = Body;

                                    SmtpClient smtp = new SmtpClient();
                                    smtp.Host = "smtp.cos.is.keysight.com";
                                    smtp.Port = 25;

                                    smtp.Send(mail);
                                }

                                read.Close();
                                string yyy = "SELECT * FROM [Events] WHERE EquipID='" + value2.ToString() + "'";
                                using (SqlCommand cmdcmd = new SqlCommand(yyy, con))
                                {
                                    SqlDataReader readread = cmdcmd.ExecuteReader();
                                    if (readread.Read())
                                    {
                                        string sql = "UPDATE Events SET EmailSent='yes' WHERE EquipID = '" + value2.ToString() + "'";
                                        SqlCommand cmd1 = new SqlCommand(sql, con);

                                        cmd1.ExecuteNonQuery();
                                    }
                                    readread.Close();
                                }
                            }
                        }
                    }
                }
                con.Close();
            }
        }

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多