今天调试程序,只要我没有关闭程序,继续点击按钮,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;
}
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;
}
解决方案 »
- WPF中如何实现在波形上显示一个十字形图形,可以用鼠标拖动,并显示当前位置的波形数值
- 怎么 把数据库 备份 成 mdf 格式 ?
- C#里如何将文件夹的图片读取到内存中
- C# MDI使用问题
- DropDownList 宽度固定 数据显示不完
- 请问 能位能提供Silverlight图表控件Visifire的仪表Gauge部分的源代码啊
- 将一个Java对象实例序列化成byte,用C#来对byte序列还原对象成C#的一个对象实例
- 日期的正则表达式问题,请教高手!!
- 关于DataGrid数据绑定焦点的问题???UP有分
- 小弟刚学c#,哪位大哥提供一个vs .net下载?谢谢……
- 求Sqlserver 2005 开发版下载地址
- RMB急求解决一个小问题,有兴趣进
{
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;
}
可以尝试使用DataTable.Clear方法来清除其内部的数据。
也可以通过在DataTable中创建一个主键列的方式来排除重复的行。