Я написал несколько пользовательских правил для FxCop 1.36.Я написал код, чтобы узнать, закрыт ли открытый DataReader или нет.Но он не проверяет, какой объект DataReader вызывает метод Close()
, поэтому я не могу быть уверен, что все открытые объекты DataReader закрыты !!
2-й: Если я DataReader в 'if / else'like
if 1=2
dr = cmd.ExecuteReader();
else
dr = cmd2.ExecuteReader();
end if
В этом случае он будет искать 2 объекта DataReader, которые будут закрыты.
Я добавлю свой код для большей ясности.
public override ProblemCollection Check(Member member)
{
Method method = member as Method;
int countCatch =0;
int countErrLog = 0;
Instruction objInstr = null;
if (method != null)
{
for (int i = 0; i < method.Instructions.Count; i++)
{
objInstr = method.Instructions[i];
if (objInstr.Value != null)
{
if (objInstr.Value.ToString()
.Contains("System.Data.SqlClient.SqlDataReader"))
{
countCatch += 1;
}
if (countCatch>0)
{
if (objInstr.Value.ToString().Contains(
"System.Data.SqlClient.SqlDataReader.Close"))
{
countErrLog += 1;
}
}
}
}
}
if (countErrLog!=countCatch)
{
Resolution resolu =
GetResolution(new string[] { method.ToString() });
Problems.Add(new Problem(resolu));
}
return Problems;
}