public static string GetTableSql(IEnumerable <string> filePaths, string tableName, char csvDelimiter = ',', int headerOffsetRows = 1)
        {
            var readers = new List <IDataReader>();

            var readerFacs = new List <Func <DataReaderInfo> >();

            foreach (var filePath in filePaths)
            {
                var readerFac = new Func <DataReaderInfo>(() =>
                {
                    var r = new DataReaderInfo
                    {
                        DataReader = DataReaderFactories.Default(filePath, true, csvDelimiter),
                        FilePath   = filePath
                    };

                    readers.Add(r.DataReader);

                    return(r);
                });
                readerFacs.Add(readerFac);
            }

            var rr = CreateTableSql.FromDataReader_Smart(tableName, readerFacs);

            foreach (var dataReader in readers)
            {
                dataReader.Dispose();
            }

            return(rr);
        }
        public static void Add(
            string name,
            TfsParameterCollection parameters,
            CreateDataReader createDataReader)
        {
            var info = new DataReaderInfo(name, parameters, createDataReader);

            Dictionary.Add(name, info);
        }
        public static T Entity(System.Data.IDataReader DataReader)
        {
            Dictionary <string, DataReaderInfo> FieldDic = new Dictionary <string, DataReaderInfo>();
            int i = 0;

            while (i < DataReader.FieldCount)
            {
                string Name = DataReader.GetName(i);
                FieldDic.Add(Name.ToLower(), new DataReaderInfo {
                    Index = i, Name = Name, FieldType = DataReader.GetFieldType(i)
                });
                i++;
            }

            List <T> Li = new List <T>();

            while (Li.Count < 1 && DataReader.Read())
            {
                T obj = (T)Activator.CreateInstance(typeof(T));
                System.Reflection.PropertyInfo[] pis = obj.GetType().GetProperties();
                int j = 0;
                while (j < pis.Length)
                {
                    string fieldName = pis[j].Name;
                    string name      = fieldName.ToLower();
                    if (FieldDic.ContainsKey(name))
                    {
                        DataReaderInfo info = FieldDic[name];
                        string         key  = info.Name;
                        object         o    = DataReader[key];
                        if (TargetTypeIsBool(pis[j].PropertyType))
                        {
                            pis[j].SetValue(obj, ConverToBool(o), null);
                        }
                        else
                        {
                            if (DBNull.Value != o)
                            {
                                pis[j].SetValue(obj, o, null);
                            }
                        }
                    }
                    j++;
                }
                Li.Add(obj);
            }
            DataReader.Close();
            return(Li.Count > 0 ? Li[0] : default(T));
        }
        public static void EntityList(System.Data.IDataReader DataReader, DbExecuteReadOnebyOneAction <T> callback)
        {
            Dictionary <string, DataReaderInfo> FieldDic = new Dictionary <string, DataReaderInfo>();
            int i = 0;

            while (i < DataReader.FieldCount)
            {
                string Name = DataReader.GetName(i);
                FieldDic.Add(Name.ToLower(), new DataReaderInfo {
                    Index = i, Name = Name, FieldType = DataReader.GetFieldType(i)
                });
                i++;
            }

            long rowNum = 0;

            while (DataReader.Read())
            {
                T obj = (T)Activator.CreateInstance(typeof(T));
                System.Reflection.PropertyInfo[] pis = obj.GetType().GetProperties();
                int j = 0;
                while (j < pis.Length)
                {
                    string fieldName = pis[j].Name;
                    string name      = fieldName.ToLower();
                    if (FieldDic.ContainsKey(name))
                    {
                        DataReaderInfo info = FieldDic[name];
                        string         key  = info.Name;
                        object         o    = DataReader[key];
                        if (TargetTypeIsBool(pis[j].PropertyType))
                        {
                            pis[j].SetValue(obj, ConverToBool(o), null);
                        }
                        else
                        {
                            if (DBNull.Value != o)
                            {
                                pis[j].SetValue(obj, o, null);
                            }
                        }
                    }
                    j++;
                }
                rowNum++;
                DbExecuteReadOnebyOneResult <T> result = new DbExecuteReadOnebyOneResult <T>(rowNum, obj);
                try
                {
                    callback(result);
                }
                catch
                {
                    break;
                }
                if (!result.Next)
                {
                    break;
                }
            }
            DataReader.Close();
        }