批插入時整理傳遞的不規範的datatable變成跟數據表中字段一致的順序

當批插入時如果不手動設置對應關係,則是按照索引排序來進行字段對應的 即datatable中的第一列對應表中第一列,datatable中的第二列對應表中的第二列,現在把datable處理成和表的字段順序和列明完全一致的結果,

        /// <summary>
        /// 給批插入的方法設置datable
        /// </summary>
        /// <param name="connectString"></param>
        /// <param name="tableName"></param>
        /// <param name="dt"></param>
        /// <returns></returns>
        private static DataTable GetBatchInsertDataTable(string connectString, string tableName, DataTable dt)
        {
            List<SpColumnsEntity> addafter = new List<SpColumnsEntity>();
            if (dt == null || dt.Rows == null || dt.Rows.Count <= 0) return dt;

            DataColumnCollection colum_dt_collection = dt.Columns;
            List<SpColumnsEntity> columns_table = ProList<SpColumnsEntity>(connectString, "sp_columns", new { table_name = tableName });
            if (columns_table == null || columns_table.Count == 0)
            {
                return dt;
            }
            //查找dt中是缺少列並進行補充
            foreach (var colun_table in columns_table)
            {
                string columname = colun_table.Column_Name.ToLower();
                bool ishas = false;
                foreach (DataColumn colun_dt in dt.Columns)
                {
                    if (colun_dt.ColumnName.ToLower() == columname)
                    {
                        ishas = true;
                        break;
                    }
                }
                if (!ishas)
                {
                    SpColumnsEntity add = new SpColumnsEntity();
                    add.Column_Name = colun_table.Column_Name;
                    add.Ordinal_Position = columns_table.IndexOf(colun_table);
                    addafter.Add(add);
                }
            }
            if (addafter != null && addafter.Count > 0)
            {
                foreach (var item in addafter)
                {
                    dt.Columns.Add(item.Column_Name);
                }
            }
            //給dt按照數據表的順序進行排序
            foreach (var colun_table in columns_table)
            {
                string columname = colun_table.Column_Name.ToLower();
                foreach (DataColumn colun_dt in dt.Columns)
                {
                    if (colun_dt.ColumnName.ToLower() == columname)
                    {
                        dt.Columns[colun_dt.ColumnName].SetOrdinal(colun_table.Ordinal_Position - 1);
                        break;
                    }
                }
            }
            //移除DT中多餘的列
            if (dt.Columns.Count > columns_table.Count)
            {
                int delcount = dt.Columns.Count - columns_table.Count;
                for (int i = 0; i < delcount; i++)
                {
                    dt.Columns.RemoveAt(columns_table.Count);
                }
            }

            return dt;
        }

裏邊還用到一個類
 

public class SpColumnsEntity
    {
        /// <summary>
        /// 列名
        /// </summary>
        public string Column_Name { set; get; }
        /// <summary>
        /// 列對應的位置
        /// </summary>

        public int Ordinal_Position { set; get; }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章