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

问题描述 投票:0回答:2

我正在使用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>

我的DB-class中的查询方法:

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

    }
    catch
    {
        return null;
    }
}
c# mysql asp.net visual-studio mysqldatareader
2个回答
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();
    }
 }

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();
 }

希望我能帮助那些人。

© www.soinside.com 2019 - 2024. All rights reserved.