我有问题。我有一个循环设置用于两个功能的统计分析。第一次通过循环在两个函数中都很好。第二次通过循环时,第二个函数不会返回任何结果。
我不明白为什么第一次通过循环我从dataReader得到结果,随后每次都得不到任何东西(datareader.hasRows == false
)
任何帮助都会很棒。提前谢谢。
下面是循环结构和第二个函数(失败)代码的概要
startDate = new DateTime(2010, 1, 1);
for(int i = 0; i < 20; i++)
{
for(int j = 1; j <= 12; j++)
{
endDate = new DateTime(2010, j, 1);
schedule = new Schedule();
scheduleXml = string.Empty;
ISession newSession = session.SessionFactory.OpenSession();
scheduleXml = GetScheduleXml(startDate, endDate, locationIds, newSession);
schedule = GetSchedule(schedule, startDate, endDate, locationIds, newSession);
newSession.Close();
}
}
public static Schedule GetSchedule(Schedule schedule, DateTime startDate, DateTime endDate, int locationIds, ISession session)
{
string sqlGetActivitiesTreatmentsRegimens = // Custom SQL Select Statement (I have verified it returns results)
using (OracleCommand comm = new OracleCommand(sqlGetActivitiesTreatmentsRegimens, (OracleConnection)session.Connection))
{
try
{
OracleParameter plantIdParam = comm.CreateParameter();
plantIdParam.DbType = DbType.Int32;
plantIdParam.Value = plantId;
comm.Parameters.Add(plantIdParam);
OracleParameter startDateParam = comm.CreateParameter();
startDateParam.DbType = DbType.DateTime;
startDateParam.Value = startDate;
comm.Parameters.Add(startDateParam);
OracleParameter endDateParam = comm.CreateParameter();
endDateParam.DbType = DbType.DateTime;
endDateParam.Value = endDate;
comm.Parameters.Add(endDateParam);
using(OracleDataReader dr = comm.ExecuteReader())
{
while(dr.Read())
{
// does stuff here
}
}
}
catch (Exception ex)
{
throw new Exception("Source:GetRegimensEx:" + ex.Message, ex.InnerException);
}
}
return new Schedule();
}
答案 0 :(得分:1)
据我所知,除了明显的语法错误之外,您发布的代码也很好。错误发生在GetScheduleXml
或实现ISession
的类的实现中。
答案 1 :(得分:0)
同意丹尼尔。此外,您在using语句中使用session.Connection,但方法签名中的参数是newSession。
DataReader处于使用状态,因此处理结束。无需额外的.Close()调用。