Exemple #1
0
        private MssqlCommandBulkCopyDataSet GetBulkCopyDataset(Type type, object value)
        {
            if (type == typeof(MssqlCommandBulkCopyDataSet))
            {
                return(value as MssqlCommandBulkCopyDataSet);
            }
            var ds = (DataSet)null;

            if (type == typeof(DataSet))
            {
                ds = value as DataSet;
            }
            if (type == typeof(DataTable))
            {
                var table = value as DataTable;
                if (table != null)
                {
                    ds = new DataSet {
                        EnforceConstraints = false
                    };
                    ds.Tables.Add(table);
                }
            }
            if (ds == null)
            {
                return(null);
            }
            return(new MssqlCommandBulkCopyDataSet(FieldSizer.FieldSizerOf(ds), ds));
        }
Exemple #2
0
        private T GetResult(SqlDataReader reader)
        {
            var type = typeof(T);

            if (type == typeof(DataSet) || type == typeof(DataTable) || type == typeof(MssqlCommandBulkCopyDataSet))
            {
                var ds = new DataSet {
                    EnforceConstraints = false
                };
                while (!reader.IsClosed)
                {
                    ds.Tables.Add().Load(reader);
                }
                object result = ds;
                if (type == typeof(DataTable))
                {
                    result = ds.Tables.Count > 0 ? ds.Tables[0] : new DataTable();
                }
                if (type == typeof(MssqlCommandBulkCopyDataSet))
                {
                    result = new MssqlCommandBulkCopyDataSet(FieldSizer.FieldSizerOf(ds), ds);
                }
                return((T)result);
            }
            return(EntityWriter.To <T>(reader));
        }
Exemple #3
0
 private void CreateTempTable(DataTable table, FieldSizer sizer, int index)
 {
     using (var cmd = new SqlCommand(GetTempTableQuery(table, sizer, index), _connection))
     {
         cmd.CommandTimeout = int.MaxValue;
         cmd.ExecuteNonQuery();
     }
 }
Exemple #4
0
        private string GetTempTableQuery(DataTable table, FieldSizer sizer, int index)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("IF OBJECT_ID('TEMPDB..#{0}') IS NOT NULL DROP TABLE #{0} ", table.TableName);
            sb.AppendFormat("CREATE TABLE #{0} (", table.TableName);
            for (int i = 0; i < table.Columns.Count; i++)
            {
                sb.AppendFormat("{0} [{1}] {2} NULL", i > 0 ? "," : "", table.Columns[i].ColumnName, GetSqlTypeText(table.Columns[i].DataType, sizer[index][i]));
            }
            sb.AppendFormat(")");
            return(sb.ToString());
        }
        public EntityReader(object entity, Type geType = null)
        {
            _fieldSizer = new FieldSizer();
            _source     = new List <object>();
            _buffer     = new List <object>();
            _entity     = entity;
            if (_entity == null)
            {
                return;
            }
            _type   = _entity.GetType();
            _geType = Je.sys.GenericOf(_type) ?? _type;
            _geType = geType != null && geType.IsAssignableFrom(_geType) ? geType : _geType;
            _map    = CommandEntity.GetMap(_geType);
            if (Je.sys.IsSimple(_type))
            {
                _source.Add(_entity);
                _fields = null;
            }
            else if (_entity is IDictionary)
            {
                _source.Add(_entity);
                _fields = GetFields(_type);
            }
            else if (_entity is IEnumerable)
            {
                foreach (var item in (IEnumerable)_entity)
                {
                    _source.Add(item);
                }
                _fields = GetFields(_geType);
            }
            else
            {
                _source.Add(_entity);
                _fields = GetFields(_geType);
            }
            var currentType = _map[_mapCounter++];

            _fields = GetFields(currentType);
            foreach (var item in _source)
            {
                _buffer.Add(item);
            }
        }
        public static FieldSizer FieldSizerOf(DataSet ds)
        {
            var sizer = new FieldSizer();

            for (int tabs = 0; tabs < ds.Tables.Count; tabs++)
            {
                var tab = ds.Tables[tabs];
                for (int rows = 0; rows < tab.Rows.Count; rows++)
                {
                    var row = tab.Rows[rows];
                    for (int cols = 0; cols < tab.Columns.Count; cols++)
                    {
                        sizer.SetSize(tabs, cols, row[cols]);
                    }
                }
            }
            return(sizer);
        }
Exemple #7
0
 public MssqlCommandBulkCopyDataSet(FieldSizer sizer, DataSet source)
 {
     Sizer  = sizer;
     Source = source;
 }