public static DbEnumeratorData <ExpandoObject> ExecDynCmd(this Context db, SqlCommand execCmd , Action <SqlCommand> setupCmd = null , Action <Exception> onError = null) { var proc = new SqlProcText { CmdText = execCmd.CommandText, Context = db, Connection = db.SqlConnection, Param = null }; SqlDataReader readerGet = null; Func <SqlDataReader> lazyReader = LazyReader(proc, (reader) => readerGet = reader, setupCmd, onError); var numeratorObj = new DbEnumeratorData <ExpandoObject>(lazyReader); if (numeratorObj == null) { return(DbEnumeratorData <ExpandoObject> .Empty); } if (!numeratorObj.ReaderAvailable) { numeratorObj.Reset(); } return(numeratorObj); }
public static ResultDyn ExecProcResultDyn(this ISqlProc proc , Action <SqlCommand> setupCmd = null , Action <Exception> onError = null) { SqlDataReader reader = null; return(DbEnumeratorData.GetResultDyn(SqlMultiDyn.LazyReader(proc, (r) => reader = r, setupCmd, onError))); }
// public static IEnumerator<ExpandoObject> public static DbEnumeratorData <ExpandoObject> ResultDyn(this ISqlProc proc , Action <SqlDataReader> readerGet, Action <SqlCommand> setupCmd = null , Action <Exception> onError = null) { Func <SqlDataReader> lazyReader = LazyReader(proc, readerGet, setupCmd, onError); var dynNumerator = new DbEnumeratorData <ExpandoObject>(lazyReader); return(dynNumerator); // as IEnumerator<ExpandoObject>; }
public static ResultDyn ExecNamedResultDyn(this Context db, object named , Action <SqlCommand> setupCmd = null , Action <Exception> onError = null) { var proc = SqlProcExt.ProcNamed(named, db); SqlDataReader reader = null; return(DbEnumeratorData.GetResultDyn(LazyReader(proc, (r) => reader = r, setupCmd, onError))); }
public static KeyValuePair <ResultDyn, IEnumerable <T> > ResultObj <T>(this Context db, object named , Action <SqlCommand> setupCmd = null , Action <Exception> onError = null) { var proc = SqlProcExt.ProcNamed(named); SqlDataReader reader = null; ResultDyn dyn = DbEnumeratorData.GetResultDyn(LazyReader(proc, (r) => reader = r, setupCmd, onError)); return(CastResult <T>(dyn, onError)); }
public static XElement ExecMergeXElem(this Context db, object namedParam , string[] elemNames , Action <SqlCommand> setupCmd = null) { KeyValuePair <SqlDataReader, DbEnumeratorData <ExpandoObject> > firstSet = db.ExecDyn(namedParam, setupCmd); var reader = firstSet.Key; var numerator = firstSet.Value; Guard.Check(elemNames.Length >= 2); var retElement = new XElement(elemNames[0]); var rootName = elemNames[1]; var depth = reader.Depth; int index = 1; while (numerator.MoveNext()) { var expando = numerator.Current as ExpandoObject; retElement.Add(expando.Convert(rootName)); } numerator.Dispose(); while (!reader.IsClosed) { if (!reader.NextResult()) { break; } index++; rootName = elemNames.Length <= index ? "Node" + index.ToString() : elemNames[index]; var result2 = DbEnumeratorData.GetResultDyn(() => { return(reader); }); while (result2.MoveNext()) { // yield return XElement elem = result2.Current.Convert(rootName); retElement.Add(elem); } result2.Dispose(); } return(retElement); }
public MultiResult <T> Prepare(SqlProc proc , Action <SqlCommand> setup = null , Action <SqlField[]> onReadFields = null , bool noMoveFirst = false ) { this.proc = proc; var mapper = new DbObject(); numerator = DbEnumeratorData.GetEnumerator(() => { this.reader = SqlMultiDyn.ExecMultiReader(proc, setup, progress: null); return(reader); }); if (numerator == null) { return(null); } if (reader.IsClosed || reader.Depth != 0) { return(null); } if (noMoveFirst) { return(this); } numerator.MoveNext(); var rec = numerator.Current as object[]; // DbDataRecord; mapHelper = mapper.GetProperties(reader); Fields = reader.GetFields(); // SqlFieldArray FirstRecord = rec; // mapHelper.SetValues(mapHelper.DbRecordArray()); return(this); }
public IEnumerator <ExpandoObject> GetEnumerator() { Reset(); DbEnumeratorData numerator = Numerator; if (numerator == null || numerator.Reader == null || !numerator.MoveNext()) { yield break; } do { var rec = numerator.Current as object[]; // IDataRecord; if (rec == null || rec.Length == 0) { yield break; // first error } dynamic obj = helper.Get(rec); if (obj != null) { yield return(obj); } }while (numerator.MoveNext()); }