调试时,第一张图,这个时候可以清晰看到监视窗口,可以看到在 全局变量中的 _dataAdapter 已经被赋值,并且拥有其 SELECT 和 Connection。
可是奇怪的是,当我到了图1的地方时,按下F11进行下一步时,却发现 _dataAdapter 的内容丢失了(SELECT 和 Connection)。如图所示:我是左琢磨,右琢磨,也没执行什么 Dispose,怪哉怪哉,是不是我犯了什么失误?
可是奇怪的是,当我到了图1的地方时,按下F11进行下一步时,却发现 _dataAdapter 的内容丢失了(SELECT 和 Connection)。如图所示:我是左琢磨,右琢磨,也没执行什么 Dispose,怪哉怪哉,是不是我犯了什么失误?
using(DataAdapter _dataAdapter ...)
{
...
_dataAdapter =
return query;
566 }所以dataAdapter被Dispose了?
反汇编如下:
执行到黄色箭头处后,再下一步,便跳到下一个断点,在此时,数据仍然存在,但是跳到红点后,数据便丢失了。
我可以肯定没有 执行DataAdapter.Dispose,析构函数也确认没有。所以我 才奇怪。
Fuck!!!原来是这样
public DataSetResult<R, XXXDataAdapter, XXXCommand> ExecuteDataSet<R>(ExecuteArgs args) where R : DataSet, new()
{
R result = new R();
Exception exception = null;
using (XXXCommand command = this.CreateCommand(args))// <--这里
{
XXXDataAdapter dataAdpater = this.CreateAdapter(command);
try
{
dataAdpater.Fill(result, args.TableName);
}
catch (Exception ex)
{
this.OnThrownException(ex, command);
exception = ex;
}
finally
{
command.Connection.TryClose();
Ex.WriteToDebug("ExecuteDataSet", command, result.ToString());
}
var query = new DataSetResult<R, XXXDataAdapter, XXXCommand>(dataAdpater, command, result, exception);
_dataAdapter = query.DataAdapter;
return query;
}
}崩溃……只顾着关注 DataAdapter 有没有被 Dispose,却忘了Command 这个玩意