public static Dictionary2D <string, int, object> ToDictionary2D(this DataTable dataTable)
        {
            IList <string> columnsName = new List <string>();

            for (int i = 0; i < dataTable.Columns.Count; ++i)
            {
                columnsName.Add(dataTable.Columns[i].ColumnName);
            }
            Dictionary2D <string, int, object> result = new Dictionary2D <string, int, object>(columnsName);

            for (int i = 0; i < dataTable.Rows.Count; ++i)
            {
                result.AddLine(i + 1);
                object[] row = dataTable.Rows[i].ItemArray;
                for (int j = 0; j < row.Length; ++j)
                {
                    result[j, i] = row[j];
                }
            }
            return(result);
        }
        public static Dictionary2D <string, int, object> ToDictionary2D(this IDataReader dataReader)
        {
            using (dataReader)
            {
                IList <string> columnsName = new List <string>();
                for (int i = 0; i < dataReader.FieldCount; ++i)
                {
                    columnsName.Add(dataReader.GetName(i));
                }
                Dictionary2D <string, int, object> result = new Dictionary2D <string, int, object>(columnsName);

                int j = 1;
                while (dataReader.Read())
                {
                    result.AddLine(j);
                    foreach (string columnName in columnsName)
                    {
                        result[columnName, j] = dataReader[columnName];
                    }
                    ++j;
                }
                return(result);
            }
        }