Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        /// <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;
            }
        }