【问题标题】:Multiple records displayed due to code由于代码显示多条记录
【发布时间】:2023-04-10 03:25:02
【问题描述】:

您好,我显示了多条记录,当我在单击按钮时插入时它们没有正确降序。

文本被添加到数据库并显示,但我在页面上显示了两组记录,插入的文本被推到第一个多条记录的底部。

我该如何纠正这个问题,所以我在页面上只得到一个返回,并且评论(来自 db 的文本)设置为 desc。

代码:

   protected void Page_Load(object sender, EventArgs e)
    {
        string theUserId = Session["UserID"].ToString();
        PopulateWallPosts(theUserId);
    }
    private void PopulateWallPosts(string userId)
    {

        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=x; Password=x;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + userId + " ORDER BY idWallPosting DESC", cn))
            {
                using (OdbcDataReader reader = cmd.ExecuteReader())
                {



                    while (reader.Read())
                    {
                        System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div.Style["float"] = "left";
                        Image img = new Image();
                        img.ImageUrl = "~/userdata/2/uploadedimage/batman-for-facebook.jpg";
                        img.AlternateText = "Test image";
                        div.Controls.Add(img);
                        test1.Controls.Add(div);

                        System.Web.UI.HtmlControls.HtmlGenericControl div1 = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div1.InnerText = String.Format("{0}", reader.GetString(0));

                        div1.Style["float"] = "left";
                        test1.Controls.Add(div1);

                        System.Web.UI.HtmlControls.HtmlGenericControl div2 = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div2.Style["clear"] = "both";
                        test1.Controls.Add(div2);
                    }
                }
            }
        }
    }








    protected void Button1_Click(object sender, EventArgs e)
    {
        string theUserId = Session["UserID"].ToString();
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=x; Password=x;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        PopulateWallPosts(theUserId);
    }
}

【问题讨论】:

  • 我的第一个代码正确地做到了这一点,但自从我添加了 html 控件的代码后,它就变得很时髦

标签: c# asp.net html


【解决方案1】:

只需在循环前清除占位符控件:

test1.Controls.Clear();
while (reader.Read())
{
   ...
}

【讨论】:

  • 谢谢影子!我怎么知道你能提供帮助,如果你对我的其他帖子有足够的了解,你可以尝试在我的其他帖子上提供一些帮助,一直试图弄清楚为什么我不能将 img 添加到 div 然后在之后附加我的数据库中的文本img.... 上面的代码非常令人沮丧,因为我得到了布局,但我的 css 完全搞砸了
  • @Garrith 我的荣幸.. 很容易发现这些事情有足够的经验。第一件事,有时间我会去看看。 :-)
【解决方案2】:

调用 PopulateWallPosts(theUserId);在 Page_Prerender 上而不是在 Load 和 Click 上两次。

PS 您的代码易受 SQL 注入和 XSS 攻击。不要相信用户的输入:)

【讨论】:

  • 什么是 Page_Prerender?你能用我的代码链接一个例子吗?
  • 它不会在加载时执行两次它的罚款加载它只有两次当我出于某种原因点击时
  • msdn.microsoft.com/en-us/library/ms178472.aspx。 test1.Controls.Clear();只是隐藏了真正的问题,无论如何您的数据库都会被读取两次。挂钩 Prerender 更好,但还有另一种方法可以避免两个数据库请求:if(!IsPostBack) PopulateWallPosts(theUserId);
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多