/// <summary>
 /// 转化成标准类型
 /// </summary>
 /// <param name="o"></param>
 /// <returns></returns>
 public static DataTableStd ParseStd(DataTable o)
 {
     if (o == null)
     {
         return(null);
     }
     else
     {
         DataTableStd dts = new DataTableStd();
         foreach (DataColumn c in o.Columns)
         {
             dts.AddColumn(c, o.PrimaryKey.Contains(c));
         }
         return(dts);
     }
 }
        /// <summary>
        /// 转化成标准类型
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public static DataTableStd ParseStd(object o)
        {
            if (o == null)
            {
                return(null);
            }
            else if (o is DbDataReader)
            {
                var ddr = (DbDataReader)o;
                var rtn = new DataTableStd();

                if (!ddr.CanGetColumnSchema())
                {
                    for (var i = 0; i < ddr.FieldCount; i++)
                    {
                        rtn.AddColumn(new ColumnP()
                        {
                            ColumnName = ddr.GetName(i)
                        });
                    }

                    while (ddr.Read())
                    {
                        rtn.NewRow();
                        foreach (var col in rtn.schema)
                        {
                            var val = ddr[col.ColumnName];
                            rtn.SetNewRowValue(ConvertDBValue2Object(val), col.ColumnName);
                        }
                        rtn.AddNewRow();
                    }
                }
                else
                {
                    var cschema = ddr.GetColumnSchema();
                    for (int i = 0; i < ddr.FieldCount; i++)
                    {
                        rtn.AddColumn(new ColumnP()
                        {
                            ColumnName      = cschema[i].ColumnName,
                            DataType        = cschema[i].DataType.FullName,
                            IsAllowNull     = cschema[i].AllowDBNull == null ? false : cschema[i].AllowDBNull.Value,
                            IsAutoIncrement = cschema[i].IsAutoIncrement == null ? false : cschema[i].IsAutoIncrement.Value,
                            IsPK            = cschema[i].IsKey == null ? false : cschema[i].IsKey.Value,
                            Length          = cschema[i].ColumnSize == null ? -1 : cschema[i].ColumnSize.Value
                        });
                    }

                    while (ddr.Read())
                    {
                        rtn.NewRow();
                        foreach (var col in rtn.ColumnNames)
                        {
                            rtn.SetNewRowValue(ConvertDBValue2Object(ddr[col]), col);
                        }

                        rtn.AddNewRow();
                    }
                }


                return(rtn);
            }
            else if (o.GetType() != Type.GetType("System.Data.DataTable"))
            {
                return(null);
            }
            else if (o is DataTableStd)
            {
                return((DataTableStd)o);
            }
            else if (o is IEnumerable <object> )
            {
                var rtn  = new DataTableStd();
                var list = ((IEnumerable <object>)o).Select(d => (FrameDLRObject)FrameDLRObject.CreateInstance(d, Constants.FrameDLRFlags.SensitiveCase));
                if (list.Count() > 0)
                {
                    var first = list.First();
                    foreach (var item in first.Items)
                    {
                        rtn.AddColumn(new ColumnP()
                        {
                            ColumnName = item.Key
                        });
                    }
                    foreach (var item in list)
                    {
                        rtn.NewRow();
                        foreach (var key in item.Keys)
                        {
                            rtn.SetNewRowValue(item.GetValue(key), key);
                        }
                        rtn.AddNewRow();
                    }
                }
                return(rtn);
            }
            else
            {
                return(null);
            }
        }