【问题标题】:ASP.NET - GridView empty after page reloadASP.NET - 页面重新加载后 GridView 为空
【发布时间】:2019-02-25 14:51:41
【问题描述】:

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

【问题讨论】:

  • 首先你的catch返回NULL,所以你得到一个你不知道它或者它是什么的错误。您需要修复它以某种方式显示/跟踪错误。还可以尝试在调试模式下单步执行您的代码

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


【解决方案1】:

虽然您的答案有效,但您可以使用更好的成语。由于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();
    }
 }

【讨论】:

    【解决方案2】:

    通过调试修复,第一次绑定后忘记关闭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();
     }
    

    希望我能帮助别人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2014-02-12
      • 2016-05-12
      • 2018-07-21
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多