0

我正在使用 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();
}

网格视图:

<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;
    }
}
4

2 回答 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();
    }
 }
于 2019-02-25T15:16:01.247 回答
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();
 }

希望我能帮助某人。

于 2019-02-25T15:09:50.700 回答