private static IList RunQueryForList(RequestScope request, ISqlMapSession session, object parameterObject, IStatement _statement) { IList list = null; using (IDbCommand command = request.IDbCommand) { list = (_statement.ListClass == null)? (new ArrayList()):(_statement.CreateInstanceOfListClass()); IDataReader reader = command.ExecuteReader(); try { while (reader.Read()) { object obj = ResultStrategyFactory.Get(_statement).Process(request, ref reader, null); if (obj != BaseStrategy.SKIP) { list.Add(obj); } } } catch { throw; } finally { reader.Close(); reader.Dispose(); } ExecutePostSelect(request); RetrieveOutputParameters(request, session, command, parameterObject); } return(list); }
internal static IList RunQueryForList(IStatement statement, RequestScope request, ISession session, object parameterObject, IList resultObject, RowDelegate rowDelegate) { IResultStrategy resultStrategy = ResultStrategyFactory.Get(statement); IList list = resultObject; using (IDbCommand command = request.IDbCommand) { if (resultObject == null) { if (statement.ListClass == null) { list = new ArrayList(); } else { list = statement.CreateInstanceOfListClass(); } } IDataReader reader = command.ExecuteReader(); try { do { if (rowDelegate == null) { //*** IList currentList = null; if (request.Statement.ResultsMap.Count == 1) { currentList = list; } else { if (request.CurrentResultMap != null) { Type genericListType = typeof(List <>).MakeGenericType(new Type[] { request.CurrentResultMap.Class }); currentList = (IList)Activator.CreateInstance(genericListType); } else { currentList = new ArrayList(); } list.Add(currentList); } //*** while (reader.Read()) { //将reader当前行中的所有字段加入到IList对象中,即obj中 object obj = resultStrategy.Process(request, ref reader, null); if (obj != BaseStrategy.SKIP) { //list.Add(obj); currentList.Add(obj); } } } else { while (reader.Read()) { object obj = resultStrategy.Process(request, ref reader, null); rowDelegate(obj, parameterObject, list); } } }while (reader.NextResult()); } finally { reader.Close(); reader.Dispose(); } ExecuteDelayedLoad(request); RetrieveOutputParameters(request, session, command, parameterObject); } return(list); }