今天调试程序,只要我没有关闭程序,继续点击按钮,DataTable的数据就会把应该释放掉的数据都保留累加,不知道是什么原因,难道我资源释放的代码有问题?请各位帮忙看看
Helper helper = new Helper();
DataTable dt = null;
DataTable dtt = null;private void button1_Click(object sender, EventArgs e)
{
    dtt = helper.GetOdbcDt("SELECT TOP " + txt.Text + " xxx FROM yyy");
    GC.Collect();
    dt  = helper.GetOdbcDt("SELECT TOP " + txt.Text + " xxx FROM zzz");
    GC.Collect();    ...    txt.Text="0";
    txt1.Text = dt.Rows.Count; // 问题,如果没有关闭程序继续点击按钮,这个数值就会累加,数据重复
    dtt.Dispose();
    dt.Dispose();
    GC.Collect();
}public DataTable GetOdbcDt(string sqlstr)
{
    try
    {
        OpenOdbcConn();
        m_OdbcDA = new OdbcDataAdapter(sqlstr, m_OdbcCon);
        m_OdbcDA.SelectCommand.CommandTimeout = 600;
        m_OdbcDA.Fill(m_DataTable);
    }
    catch (Exception ex)
    {
        ErrLog(DateTime.Now.ToString() + " : " + sqlstr + "\r\n" + ex.Message + "\r\n");
        return null;
    }
    finally
    {
        m_DataTable.Dispose();
        m_OdbcDA.Dispose();
        m_OdbcCon.Close();
    }
    if (m_DataTable == null) return null;
    if (m_DataTable.Rows.Count <= 0) return null;
    return m_DataTable;
}

解决方案 »

  1.   

    public DataTable GetOdbcDt(string sqlstr)
    {
        try
        {
           m_DataTable.Clear(); 
            OpenOdbcConn();
            m_OdbcDA = new OdbcDataAdapter(sqlstr, m_OdbcCon);
            m_OdbcDA.SelectCommand.CommandTimeout = 600;
            m_OdbcDA.Fill(m_DataTable);
        }
        catch (Exception ex)
        {
            ErrLog(DateTime.Now.ToString() + " : " + sqlstr + "\r\n" + ex.Message + "\r\n");
            return null;
        }
        finally
        {
            m_DataTable.Dispose();
            m_OdbcDA.Dispose();
            m_OdbcCon.Close();
        }
        if (m_DataTable == null) return null;
        if (m_DataTable.Rows.Count <= 0) return null;
        return m_DataTable;
    }
      

  2.   

    @lz您好:
    可以尝试使用DataTable.Clear方法来清除其内部的数据。
    也可以通过在DataTable中创建一个主键列的方式来排除重复的行。