循环插入问题,重新加载页面加载?

Posted

技术标签:

【中文标题】循环插入问题,重新加载页面加载?【英文标题】:Loop insert problem, reload page load? 【发布时间】:2011-07-21 06:10:38 【问题描述】:

我试图在页面加载中使用我的函数实现插入语句并返回。不知道如何在插入的同时将我插入 mysql 的内容一次又一次地画出来?

代码:

public partial class UserProfileWall : System.Web.UI.Page

    protected void Page_Load(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=user_name; Password=password_here;"))
        
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + theUserId + " ORDER BY idWallPosting DESC", cn))

            using (OdbcDataReader reader = cmd.ExecuteReader())
            
                var divhtml = new System.Text.StringBuilder();
                while (reader.Read())
                
                    divHtml.Append("<div id=test>");
                    divHtml.Append(String.Format("0", reader.GetString(0)));
                    divHtml.Append("</div>");
                
                test1.InnerHtml = divHtml.ToString();
            
        
    

    protected void Button1_Click(object sender, EventArgs e)
    
        string theUserId = Session["UserID"].ToString();
        OdbcConnection cn = new OdbcConnection("Driver=MySQL ODBC 3.51 Driver; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;");
        cn.Open();

        OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn);
        cmd.ExecuteNonQuery();
    //    
    //        using (OdbcCommand md = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + theUserId + "", cn))

    //        using (OdbcDataReader reader = cmd.ExecuteReader())
    //        
    //            var divHtml = new System.Text.StringBuilder();
    //            while (reader.Read())
    //            
    //                divHtml.Append("<div id=test>");
    //                divHtml.Append(String.Format("0", reader.GetString(0)));
    //                divHtml.Append("</div>");
    //            
    //            test1.InnerHtml = divHtml.ToString();
    //        
    //    
    //

我确实尝试了注释掉的行,但我得到了多个插入,并且页面上没有重新加载。插入后有没有简单的方法获取pageload函数?

【问题讨论】:

目前还不是很清楚到底是什么问题 - 什么插入?进入数据库?在页面上?问题出在哪里?初始负载?回传? 向下滚动插入按钮单击事件中的代码,这需要用户在 mysql 中键入和插入的内容,然后我需要以某种方式重新加载页面,因为在插入和发布时会丢失用户文本通过我的页面加载功能返回信息,即选择循环 另一方面,您应该将连接字符串移动到 web.config 中,或者至少移动到某个静态变量中。 【参考方案1】:

首先,将使用墙柱填充元素的代码移动到单独的函数中:

private void PopulateWallPosts(string userId)

    using (OdbcConnection cn = new OdbcConnection("Driver=MySQL ODBC 3.51 Driver; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;"))
        
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + userId) + " ORDER BY idWallPosting DESC", cn))
        
            using (OdbcDataReader reader = cmd.ExecuteReader())
            
                var divHtml = new System.Text.StringBuilder();
                while (reader.Read())
                
                    divHtml.Append("<div id=test>");
                    divHtml.Append(String.Format("0", reader.GetString(0)));
                    divHtml.Append("</div>");
                
                test1.InnerHtml = divHtml.ToString();
            
        
    

现在在 Page_Load 中调用它:

protected void Page_Load(object sender, EventArgs e)

    string theUserId = Session["UserID"].ToString();
    PopulateWallPosts(theUserId);

最后在插入新值后调用:

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=user_name; Password=password_here;"))
    
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn))
        
            cmd.ExecuteNonQuery();
        
    
    PopulateWallPosts(theUserId);

您的注释代码不起作用,因为您再次执行了INSERT INTO 命令而不是 SELECT 命令。

无论如何,你最好学习一下 SQL 注入并更改你的代码以使用参数,而不是直接将用户 ID 添加到 SQL 字符串中。

【讨论】:

@spender 谢谢,这对我来说很刺眼。自从经典的 ASP 以来,它就一直在到处看到。 :// shadow 你能看看这篇文章,也许你能帮我解决类似这个问题,***.com/questions/5419192/…

以上是关于循环插入问题,重新加载页面加载?的主要内容,如果未能解决你的问题,请参考以下文章

node.js + mysql + ejs 数据插入后无需重新加载页面即可更新屏幕信息

同时使用time.sleep()循环而无需重新加载页面

SP插入后,下一页有一个空结果,直到重新加载

刷新数据表而不重新加载页面

如何在另一页面的事件中重新加载或刷新一个页面的存储数据

vue 只刷新一次页面