ASP.NET-页面重新加载后GridView为空

时间:2019-02-25 14:51:41

标签: c# mysql asp.net visual-studio mysqldatareader

我正在使用MySQL数据库存储一些数据,我在ASP项目中有一个页面,当您将页面作为标准结果打开时,该页面应显示整个表格。

实际上确实可以,但是只有一次,如果您重新加载页面或直接指向另一页面并返回,则GridView不会显示。与数据库的连接仍然存在... 这是我的代码:

private Class.DB db;
protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;");
    GridDataView1.DataSource = mdr;
    GridDataView1.DataBind();
}

GridView:

<asp:GridView ID="GridDataView1" runat="server" EmptyDataText="No Data!">
</asp:GridView>

我的数据库类中的查询方法:

public MySqlDataReader executeQuery(String command)
{
    try
    {
        MySqlCommand cmd = new MySqlCommand(command, this.conn);
        MySqlDataReader mdr = cmd.ExecuteReader();
        return mdr;

    }
    catch
    {
        return null;
    }
}

2 个答案:

答案 0 :(得分:0)

已通过调试修复,但在第一次绑定后忘记关闭DataReader。 代码应为:

protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;");
    GridDataView1.DataSource = mdr;
    GridDataView1.DataBind();
    mdr.Close();
 }

希望我可以帮助别人。

答案 1 :(得分:0)

虽然您的答案有效,但是您可以使用更好的习惯用法。由于MySqlDataReader继承自IDisposable,因此您可以编写:

protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    using (MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;")) 
    {
        GridDataView1.DataSource = mdr;
        GridDataView1.DataBind();
    }
 }