代码之家  ›  专栏  ›  技术社区  ›  Prateek Jahagirdar

无法正确地循环发送短信息,错误地将多个短信息发送给一个人

  •  0
  • Prateek Jahagirdar  · 技术社区  · 6 年前

    我正在尝试使用ASP.NET中的GridView向缺勤人数发送短信。功能如下: -在一个班级的所有学生中,用户未选中时,学生将被标记为缺席,反之亦然。 -现在的问题是,当我试图取消选中一个学生并提交时,它会一次发送大约50条消息,即使只有一个学生不在。它应该只向缺席者发送信息。 请帮我参考下面的代码。提前感谢:

    protected void InsertAttendence()
    {
        DateTime systemdate2 = DateTime.Today.Date;
        foreach (GridViewRow row in gvStudents.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                CheckBox chkAttendance = row.FindControl("chkAttendence") as CheckBox;
                string attendanceStatus = chkAttendance.Checked ? "Present" : "Absent";
                string Class = ((row.FindControl("lblclass") as Label).Text.Trim());
                string StudentName = ((row.FindControl("lblname") as Label).Text.Trim());
                string STSNO = ((row.FindControl("lblstsno") as Label).Text.Trim());
                string Mobile = ((row.FindControl("lblmobile") as Label).Text.Trim());
                string Division = ((row.FindControl("lbldiv") as Label).Text.Trim());
                //string sttendenceDate = (this.txtDate.Text.Trim());
                string constring = ConfigurationManager.ConnectionStrings["stjosephconnect"].ConnectionString;
                using (SqlConnection conInsert = new SqlConnection(constring))
                {
                    try
                    {
                        string query = "INSERT INTO studentattendance(attdate, stsno, name, mobile, class, div, attendance, remarks, status, rem) "
                                       + "VALUES(@attdate, @stsno, @name, @mobile, @class, @div, @attendance, @remarks, @status, @rem)";
                        using (SqlCommand cmd = new SqlCommand(query, conInsert))
                        {
                            conInsert.Open();
                            cmd.Parameters.AddWithValue("@attdate", systemdate2);
                            cmd.Parameters.AddWithValue("@stsno", STSNO);
                            cmd.Parameters.AddWithValue("@name", StudentName);
                            cmd.Parameters.AddWithValue("@mobile", Mobile);
                            cmd.Parameters.AddWithValue("@class", Class);
                            cmd.Parameters.AddWithValue("@div", Division);
                            cmd.Parameters.AddWithValue("@attendance", attendanceStatus);
                            cmd.Parameters.AddWithValue("@remarks", "Test Remarks!");
                            cmd.Parameters.AddWithValue("@status", "1");
                            cmd.Parameters.AddWithValue("@rem", "0");
                            int i = cmd.ExecuteNonQuery();
                            if (i > 0)
                            {
                                ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Data saved successfully, Thank-You!');", true);
                                chkAttendance.Checked = false;
                                using (SqlConnection GetAbsentCon = new SqlConnection(constring))
                                {
                                    string TodaysDate = DateTime.Now.ToString("yyyy-MM-dd");
                                    GetAbsentCon.Open();
                                    using (SqlCommand GetAbsentCmd = new SqlCommand("select mobile from studentattendance where  convert(varchar(10), attdate, 120) = '" + TodaysDate + "' and attendance='Absent'", GetAbsentCon))
                                    {
                                        SqlDataReader dr = GetAbsentCmd.ExecuteReader();
                                        while (dr.Read())
                                        {
                                            numbers = dr["mobile"].ToString().TrimStart('0');
                                            SendSMS();
                                        }
                                        GetAbsentCon.Close();
                                    }
                                }
                            }
                            else
                            {
                                ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('There was some error in connection');", true);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Response.Write("<script language='javascript'>alert('" + Server.HtmlEncode(ex.Message.ToString()) + "')</script>");
                    }
                    finally
                    {
                        conInsert.Close();
                    }
                }
            }
        }
    }
    

    请帮我摆脱这种尴尬的处境。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gagan Deep    6 年前

    可能您应该在此SQL语句中为studentid或studentno添加一个条件。

    using (SqlCommand GetAbsentCmd = new SqlCommand("select mobile from studentattendance where  convert(varchar(10), attdate, 120) = '" + TodaysDate + "' and attendance='Absent'", GetAbsentCon))