Beispiel #1
0
 /// <summary>
 /// 创建使用指定值的行,并将其添加到 MDataRowCollection 中
 /// </summary>
 /// <param name="values"></param>
 public void Add(params object[] values)
 {
     if (_Table != null)
     {
         if (values != null && values.Length <= _Table.Columns.Count)
         {
             _Table.NewRow(true).LoadFrom(values);
         }
     }
 }
Beispiel #2
0
        /// <summary>
        /// 将行的数据转成两列(ColumnName、Value)的表
        /// </summary>
        public MDataTable ToTable()
        {
            MDataTable dt = new MDataTable(TableName);

            dt.Columns.Add("ColumnName");
            dt.Columns.Add("Value");
            for (int i = 0; i < Count; i++)
            {
                dt.NewRow(true).Set(0, this[i].ColumnName).Set(1, this[i].ToString());
            }
            return(dt);
        }
Beispiel #3
0
        /// <summary>
        /// 将表结构的数据转成Table显示
        /// </summary>
        /// <returns></returns>
        public MDataTable ToTable()
        {
            string tableName = string.Empty;

            if (_Table != null)
            {
                tableName = _Table.TableName;
            }
            MDataTable dt = new MDataTable(tableName);

            dt.Columns.Add("ColumnName");
            dt.Columns.Add("MaxSize");
            dt.Columns.Add("Scale");
            dt.Columns.Add("IsCanNull");
            dt.Columns.Add("IsAutoIncrement");
            dt.Columns.Add("SqlType");
            dt.Columns.Add("IsPrimaryKey");
            dt.Columns.Add("IsUniqueKey");
            dt.Columns.Add("IsForeignKey");
            dt.Columns.Add("FKTableName");
            dt.Columns.Add("DefaultValue");
            dt.Columns.Add("Description");
            dt.Columns.Add("TableName");

            for (int i = 0; i < Count; i++)
            {
                MCellStruct ms = this[i];
                dt.NewRow(true)
                .Set(0, ms.ColumnName)
                .Set(1, ms.MaxSize)
                .Set(2, ms.Scale)
                .Set(3, ms.IsCanNull)
                .Set(4, ms.IsAutoIncrement)
                .Set(5, ms.SqlType)
                .Set(6, ms.IsPrimaryKey)
                .Set(7, ms.IsUniqueKey)
                .Set(8, ms.IsForeignKey)
                .Set(9, ms.FKTableName)
                .Set(10, ms.DefaultValue)
                .Set(11, ms.Description)
                .Set(12, ms.TableName);
            }
            return(dt);
        }
Beispiel #4
0
        public static MDataTable Select(MDataTable table, int pageIndex, int pageSize, object whereObj, params object[] selectColumns)
        {
            if (table == null)
            {
                return(null);
            }
            MDataTable sTable = table.GetSchema(true);

            sTable.RecordsAffected = table.Rows.Count;
            if (table.Rows.Count == 0)                    // 正常情况下,看是否需要处理列移除
            {
                FilterColumns(ref sTable, selectColumns); //列查询过滤
                return(sTable);
            }
            MDataRowCollection findRows = FindAll(table, whereObj);

            if (findRows != null)
            {
                sTable.RecordsAffected = findRows.Count;    //设置记录总数
                FilterPager(findRows, pageIndex, pageSize); //进行分页筛选,再克隆最后的数据。

                for (int i = 0; i < findRows.Count; i++)
                {
                    if (i < findRows.Count)//内存表时(表有可能在其它线程被清空)
                    {
                        MDataRow row = findRows[i];
                        if (row == null)
                        {
                            break;
                        }
                        sTable.NewRow(true).LoadFrom(row);
                    }
                }

                findRows = null;
            }
            if (selectColumns != null && selectColumns.Length > 0)
            {
                FilterColumns(ref sTable, selectColumns);//列查询过滤,由于查询的条件可能包含被移除列,所以只能在最后才过滤
            }
            //进行条件查询
            return(sTable);
        }
Beispiel #5
0
        /// <summary>
        /// 将表结构的数据转成Table显示
        /// </summary>
        /// <returns></returns>
        public MDataTable ToTable()
        {
            string tableName = string.Empty;

            if (_Table != null)
            {
                tableName = _Table.TableName;
            }
            MDataTable dt = new MDataTable(tableName);

            dt.Columns.Add("ColumnName,DataType,SqlType,MaxSize,Scale");
            dt.Columns.Add("IsPrimaryKey,IsAutoIncrement,IsCanNull,IsUniqueKey,IsForeignKey", SqlDbType.Bit);
            dt.Columns.Add("TableName,FKTableName,DefaultValue,Description");

            for (int i = 0; i < Count; i++)
            {
                MCellStruct ms = this[i];
                dt.NewRow(true)
                .Sets(0, ms.ColumnName, ms.ValueType.Name, ms.SqlType, ms.MaxSize, ms.Scale)
                .Sets(5, ms.IsPrimaryKey, ms.IsAutoIncrement, ms.IsCanNull, ms.IsUniqueKey, ms.IsForeignKey)
                .Sets(10, ms.TableName, ms.FKTableName, ms.DefaultValue, ms.Description);
            }
            return(dt);
        }
Beispiel #6
0
 /// <summary>
 /// 接收Post过来的Json权限
 /// </summary>
 /// <returns></returns>
 private MDataTable GetTable(string roleID)
 {
     MDataTable rowAction = new MDataTable(TableNames.Sys_RoleAction.ToString());
     rowAction.Columns.Add("RoleID", SqlDbType.NVarChar);
     rowAction.Columns.Add("MenuID", SqlDbType.NVarChar);
     rowAction.Columns.Add("ActionID", SqlDbType.NVarChar);
     MDataTable dt;
     if (Query<string>("all") == "1")
     {
         dt = SysMenu.MenuTable;
     }
     else
     {
         dt = MDataTable.CreateFrom(Query<string>("data"));
     }
     if (dt != null && dt.Rows.Count > 0)
     {
         string menuID = string.Empty;
         foreach (MDataRow row in dt.Rows)
         {
             menuID = row.Get<string>("MenuID");
             if (!string.IsNullOrEmpty(menuID))
             {
                 string[] ActionIDs = row.Get<string>("ActionIDs", "").Split(',');
                 foreach (string actionID in ActionIDs)
                 {
                     if (!string.IsNullOrEmpty(actionID))
                     {
                         rowAction.NewRow(true).Set(0, roleID).Set(1, menuID).Set(2, actionID);
                     }
                 }
             }
         }
     }
     return rowAction;
 }
Beispiel #7
0
        internal static MDataTable Join(MDataTable dtA, MDataTable dtB, params string[] columns)
        {
            #region 判断条件
            int aIndex = dtA.joinOnIndex;
            if (aIndex == -1 && dtA.Columns.FirstPrimary != null)
            {
                aIndex = dtA.Columns.GetIndex(dtA.Columns.FirstPrimary.ColumnName);
            }
            int bIndex = dtB.joinOnIndex;
            if (bIndex == -1 && dtB.Columns.FirstPrimary != null)
            {
                bIndex = dtB.Columns.GetIndex(dtB.Columns.FirstPrimary.ColumnName);
            }
            if (aIndex == -1 || bIndex == -1)
            {
                Error.Throw("set MDataTable's JoinOnName first");
            }
            #endregion

            #region 构建新表及表结构
            MDataTable joinTable = new MDataTable("V_" + dtA.TableName);
            joinTable.Columns.AddRange(dtA.Columns.Clone());
            if (columns.Length == 0)
            {
                joinTable.Columns.AddRange(dtB.Columns.Clone());
            }
            else
            {
                foreach (string column in columns)
                {
                    if (dtB.Columns.Contains(column))
                    {
                        joinTable.Columns.Add(dtB.Columns[column].Clone());
                    }
                }
            }
            #endregion

            List<string> noFind = new List<string>();
            Dictionary<string, string> yesFind = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
            string v1 = string.Empty;
            MDataRow row, joinRow;
            int count = dtB.Rows.Count;
            for (int i = 0; i < dtA.Rows.Count; i++)
            {
                row = dtA.Rows[i];
                if (count == 0 || row[aIndex].IsNullOrEmpty || noFind.Contains(row[aIndex].strValue))
                {
                    joinRow = joinTable.NewRow(true);
                    joinRow.LoadFrom(row);//后载加A表(同名则复盖)
                }
                else
                {
                    v1 = row[aIndex].strValue;
                    if (yesFind.ContainsKey(v1)) // 找到已匹配的数据
                    {
                        string[] items = yesFind[v1].Split(',');
                        foreach (string item in items)
                        {
                            joinRow = joinTable.NewRow(true);
                            joinRow.LoadFrom(dtB.Rows[int.Parse(item)]);//先加载B表
                            joinRow.LoadFrom(row);//后载加A表(同名则复盖)
                        }
                    }
                    else
                    {
                        bool isFind = false;
                        for (int j = 0; j < dtB.Rows.Count; j++)
                        {
                            if (v1 == dtB.Rows[j][bIndex].strValue)//找到
                            {
                                joinRow = joinTable.NewRow(true);
                                joinRow.LoadFrom(dtB.Rows[j]);//先加载B表
                                joinRow.LoadFrom(row);//后载加A表(同名则复盖)
                                isFind = true;
                                if (yesFind.ContainsKey(v1))
                                {
                                    yesFind[v1] = yesFind[v1] + "," + j;
                                }
                                else
                                {
                                    yesFind.Add(v1, j.ToString());
                                }
                            }
                        }
                        if (!isFind)
                        {
                            noFind.Add(v1);
                        }
                    }
                }

            }

            #region 注销临时变量
            noFind.Clear();
            noFind = null;
            yesFind.Clear();
            yesFind = null;
            #endregion

            return joinTable;
        }
Beispiel #8
0
        internal static MDataTable Join(MDataTable dtA, MDataTable dtB, params string[] columns)
        {
            //记录 id as Pid 映射的列名,中间记录,修改dtB的列名,后面还原
            Dictionary <string, string> mapName = new Dictionary <string, string>();

            #region 判断条件
            int aIndex = dtA.joinOnIndex;
            if (aIndex == -1 && dtA.Columns.FirstPrimary != null)
            {
                aIndex = dtA.Columns.GetIndex(dtA.Columns.FirstPrimary.ColumnName);
            }
            int bIndex = dtB.joinOnIndex;
            if (bIndex == -1 && dtB.Columns.FirstPrimary != null)
            {
                bIndex = dtB.Columns.GetIndex(dtB.Columns.FirstPrimary.ColumnName);
            }
            if (aIndex == -1 || bIndex == -1)
            {
                Error.Throw("set MDataTable's JoinOnName first");
            }
            #endregion

            #region 构建新表及表结构
            MDataTable joinTable = new MDataTable("V_" + dtA.TableName);
            joinTable.Conn = dtA.Conn;
            joinTable.Columns.AddRange(dtA.Columns.Clone());
            if (columns.Length == 0)
            {
                joinTable.Columns.AddRange(dtB.Columns.Clone());
            }
            else
            {
                foreach (string column in columns)
                {
                    string[]    items = column.Split(' ');
                    string      name  = items[0];
                    MCellStruct ms    = null;
                    if (dtB.Columns.Contains(name))
                    {
                        ms = dtB.Columns[name].Clone();
                    }
                    if (items.Length > 1)
                    {
                        name = items[items.Length - 1];
                        if (ms == null && dtB.Columns.Contains(name))
                        {
                            ms = dtB.Columns[name].Clone();
                        }
                    }

                    if (ms != null)
                    {
                        if (ms.ColumnName != name)
                        {
                            dtB.Columns[ms.ColumnName].ColumnName = name;//修改DtB的列名,结尾再还原。
                            mapName.Add(name, ms.ColumnName);
                            ms.ColumnName = name;
                        }
                        joinTable.Columns.Add(ms);
                    }
                }
            }
            #endregion

            List <string> noFind = new List <string>();
            Dictionary <string, string> yesFind = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            string   v1 = string.Empty;
            MDataRow row, joinRow;
            int      count = dtB.Rows.Count;
            for (int i = 0; i < dtA.Rows.Count; i++)
            {
                row = dtA.Rows[i];
                if (count == 0 || row[aIndex].IsNullOrEmpty || noFind.Contains(row[aIndex].StringValue))
                {
                    joinRow = joinTable.NewRow(true);
                    joinRow.LoadFrom(row);//后载加A表(同名则复盖)
                }
                else
                {
                    v1 = row[aIndex].StringValue;
                    if (yesFind.ContainsKey(v1)) // 找到已匹配的数据
                    {
                        string[] items = yesFind[v1].Split(',');
                        foreach (string item in items)
                        {
                            joinRow = joinTable.NewRow(true);
                            joinRow.LoadFrom(dtB.Rows[int.Parse(item)]); //先加载B表
                            joinRow.LoadFrom(row);                       //后载加A表(同名则复盖)
                        }
                    }
                    else
                    {
                        bool isFind = false;
                        for (int j = 0; j < dtB.Rows.Count; j++)
                        {
                            if (v1 == dtB.Rows[j][bIndex].StringValue)//找到
                            {
                                joinRow = joinTable.NewRow(true);
                                joinRow.LoadFrom(dtB.Rows[j]); //先加载B表
                                joinRow.LoadFrom(row);         //后载加A表(同名则复盖)
                                isFind = true;
                                if (yesFind.ContainsKey(v1))
                                {
                                    yesFind[v1] = yesFind[v1] + "," + j;
                                }
                                else
                                {
                                    yesFind.Add(v1, j.ToString());
                                }
                            }
                        }
                        if (!isFind)
                        {
                            noFind.Add(v1);
                            joinRow = joinTable.NewRow(true); //找不到时,只加载A表。
                            joinRow.LoadFrom(row);            //后载加A表(同名则复盖)
                        }
                    }
                }
            }
            //还原DtB的列
            if (mapName.Count > 0)
            {
                foreach (KeyValuePair <string, string> item in mapName)
                {
                    dtB.Columns[item.Key].ColumnName = item.Value;
                }
            }
            #region 注销临时变量
            noFind.Clear();
            noFind = null;
            yesFind.Clear();
            yesFind = null;
            mapName = null;
            #endregion

            return(joinTable);
        }
        internal static MDataTable Join(MDataTable dtA, MDataTable dtB, params string[] columns)
        {
            #region 判断条件
            int aIndex = dtA.joinOnIndex;
            if (aIndex == -1 && dtA.Columns.FirstPrimary != null)
            {
                aIndex = dtA.Columns.GetIndex(dtA.Columns.FirstPrimary.ColumnName);
            }
            int bIndex = dtB.joinOnIndex;
            if (bIndex == -1 && dtB.Columns.FirstPrimary != null)
            {
                bIndex = dtB.Columns.GetIndex(dtB.Columns.FirstPrimary.ColumnName);
            }
            if (aIndex == -1 || bIndex == -1)
            {
                Error.Throw("set MDataTable's JoinOnName first");
            }
            #endregion

            #region 构建新表及表结构
            MDataTable joinTable = new MDataTable("V_" + dtA.TableName);
            joinTable.Columns.AddRange(dtA.Columns.Clone());
            if (columns.Length == 0)
            {
                joinTable.Columns.AddRange(dtB.Columns.Clone());
            }
            else
            {
                foreach (string column in columns)
                {
                    if (dtB.Columns.Contains(column))
                    {
                        joinTable.Columns.Add(dtB.Columns[column].Clone());
                    }
                }
            }
            #endregion

            List <string> noFind = new List <string>();
            Dictionary <string, string> yesFind = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            string   v1 = string.Empty;
            MDataRow row, joinRow;
            int      count = dtB.Rows.Count;
            for (int i = 0; i < dtA.Rows.Count; i++)
            {
                row = dtA.Rows[i];
                if (count == 0 || row[aIndex].IsNullOrEmpty || noFind.Contains(row[aIndex].strValue))
                {
                    joinRow = joinTable.NewRow(true);
                    joinRow.LoadFrom(row);//后载加A表(同名则复盖)
                }
                else
                {
                    v1 = row[aIndex].strValue;
                    if (yesFind.ContainsKey(v1)) // 找到已匹配的数据
                    {
                        string[] items = yesFind[v1].Split(',');
                        foreach (string item in items)
                        {
                            joinRow = joinTable.NewRow(true);
                            joinRow.LoadFrom(dtB.Rows[int.Parse(item)]); //先加载B表
                            joinRow.LoadFrom(row);                       //后载加A表(同名则复盖)
                        }
                    }
                    else
                    {
                        bool isFind = false;
                        for (int j = 0; j < dtB.Rows.Count; j++)
                        {
                            if (v1 == dtB.Rows[j][bIndex].strValue)//找到
                            {
                                joinRow = joinTable.NewRow(true);
                                joinRow.LoadFrom(dtB.Rows[j]); //先加载B表
                                joinRow.LoadFrom(row);         //后载加A表(同名则复盖)
                                isFind = true;
                                if (yesFind.ContainsKey(v1))
                                {
                                    yesFind[v1] = yesFind[v1] + "," + j;
                                }
                                else
                                {
                                    yesFind.Add(v1, j.ToString());
                                }
                            }
                        }
                        if (!isFind)
                        {
                            noFind.Add(v1);
                            joinRow = joinTable.NewRow(true); //找不到时,只加载A表。
                            joinRow.LoadFrom(row);            //后载加A表(同名则复盖)
                        }
                    }
                }
            }

            #region 注销临时变量
            noFind.Clear();
            noFind = null;
            yesFind.Clear();
            yesFind = null;
            #endregion

            return(joinTable);
        }