public void TestEmptyEnumeratorWithRealSqlReader() { IDataReader reader = new DataProvider().GetEmptyDataReader(); var enumerator = new DataReaderEnumerator(reader); Assert.IsTrue(reader.IsClosed); Assert.AreEqual(0, enumerator.RowCount); Assert.IsFalse(enumerator.MoveNext()); Assert.AreEqual(0, enumerator.RowCount); }
public void TestEnumerator() { IDataReader reader = new DataProvider().GetAllCustomersDataReader(); var enumerator = new DataReaderEnumerator(reader); Assert.IsTrue(reader.IsClosed); Assert.AreEqual(3, enumerator.RowCount); Assert.IsTrue(enumerator.MoveNext()); DataRow dataRow = enumerator.Current; Assert.AreEqual(1, dataRow.ItemArray[dataRow.Table.Columns["Id"].Ordinal]); Assert.AreEqual("Customer 1", dataRow.ItemArray[dataRow.Table.Columns["Name"].Ordinal]); Assert.AreEqual(false, dataRow.ItemArray[dataRow.Table.Columns["IsVip"].Ordinal]); Assert.AreEqual(DBNull.Value, dataRow.ItemArray[dataRow.Table.Columns["Type"].Ordinal]); Assert.IsTrue(enumerator.MoveNext()); dataRow = enumerator.Current; Assert.AreEqual(2, dataRow.ItemArray[dataRow.Table.Columns["Id"].Ordinal]); Assert.AreEqual("Customer 2", dataRow.ItemArray[dataRow.Table.Columns["Name"].Ordinal]); Assert.AreEqual(true, dataRow.ItemArray[dataRow.Table.Columns["IsVip"].Ordinal]); Assert.AreEqual(1, dataRow.ItemArray[dataRow.Table.Columns["Type"].Ordinal]); dataRow = enumerator.Current; Assert.AreEqual(2, dataRow.ItemArray[dataRow.Table.Columns["Id"].Ordinal]); Assert.AreEqual("Customer 2", dataRow.ItemArray[dataRow.Table.Columns["Name"].Ordinal]); Assert.AreEqual(true, dataRow.ItemArray[dataRow.Table.Columns["IsVip"].Ordinal]); Assert.AreEqual(1, dataRow.ItemArray[dataRow.Table.Columns["Type"].Ordinal]); Assert.IsTrue(enumerator.MoveNext()); dataRow = enumerator.Current; Assert.AreEqual(3, dataRow.ItemArray[dataRow.Table.Columns["Id"].Ordinal]); Assert.AreEqual("Customer 3", dataRow.ItemArray[dataRow.Table.Columns["Name"].Ordinal]); Assert.AreEqual(DBNull.Value, dataRow.ItemArray[dataRow.Table.Columns["IsVip"].Ordinal]); Assert.AreEqual(DBNull.Value, dataRow.ItemArray[dataRow.Table.Columns["Type"].Ordinal]); Assert.IsFalse(enumerator.MoveNext()); Assert.AreEqual(3, enumerator.RowCount); enumerator.Reset(); Assert.AreEqual(3, enumerator.RowCount); IList <DataRow> result = new List <DataRow>(); while (enumerator.MoveNext()) { result.Add(enumerator.Current); } Assert.AreEqual(3, result.Count); Assert.AreEqual(3, enumerator.RowCount); }
/// <summary> /// 初始化 /// </summary> /// <param name="input"></param> public Mapper(object input) : this() { var reader = input as IDataReader; if (reader != null) { _reader = new DataReaderEnumerator(reader); Error = _reader.Error; _index = 1; return; } var no = input as NameObjectCollectionBase; if (no != null) { _nv = new NameValueEnumerator(no); Error = _nv.Error; _index = 2; return; } var row = (input as DataRowView)?.Row ?? input as DataRow; if (row?.Table != null) { _row = new DataRowEnumerator(row); Error = _row.Error; _index = 3; return; } var dataset = input as DataSet; if (dataset != null) { _dataSet = new DataSetEnumerator(dataset); Error = _dataSet.Error; _index = 4; return; } var dict = input as IDictionary; if (dict != null) { _enumerator = dict.GetEnumerator(); _index = 5; return; } var ee = (input as IEnumerable)?.GetEnumerator() ?? input as IEnumerator; if (ee != null) { _pair = new PairEnumerator(ee); Error = _pair.Error; _index = 6; return; } var ps = PublicPropertyCache.GetByType(input.GetType()); if (ps.Length > 0) { _property = new PropertyEnumerator(input, ps); Error = _property.Error; _index = 7; } }