예제 #1
0
        internal Dictionary <string, bool> GetExistsTables(string serchPattern)
        {
            if (string.IsNullOrEmpty(serchPattern))
            {
                throw new ArgumentNullException("serchPattern");
            }

            string tablesQuery = string.Format(@"SELECT *
                FROM INFORMATION_SCHEMA.TABLES
                WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME LIKE '{0}'", serchPattern);

            Dictionary <string, bool> uniqueTables = new Dictionary <string, bool>();
            DataTable tablesInfo = this.DataAdapter.GetDataTable(tablesQuery);

            foreach (DataRow tableInfoRow in tablesInfo.Rows)
            {
                string tableName = DataRowReader.GetStringValue(tableInfoRow, "TABLE_NAME");
                if (string.IsNullOrEmpty(tableName))
                {
                    continue;
                }

                if (!uniqueTables.ContainsKey(tableName))
                {
                    uniqueTables.Add(tableName, true);
                }
            }

            return(uniqueTables);
        }
예제 #2
0
        private Dictionary <string, ICollection> GetTablesMetadata(string query)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException("query");
            }

            Dictionary <string, ICollection> metadataCollection = new Dictionary <string, ICollection>();

            DataTable dtResult = this.DataAdapter.GetDataTable(query);

            foreach (DataRow resultRow in dtResult.Rows)
            {
                string tableName = DataRowReader.GetStringValue(resultRow, "TableName");
                if (string.IsNullOrEmpty(tableName))
                {
                    continue;
                }

                string         tableNameLow = tableName.ToLower();
                List <DataRow> metadataRows = null;
                if (metadataCollection.ContainsKey(tableNameLow))
                {
                    metadataRows = (List <DataRow>)metadataCollection[tableNameLow];
                }
                else
                {
                    metadataRows = new List <DataRow>();
                    metadataCollection.Add(tableNameLow, metadataRows);
                }
                if (metadataRows == null)
                {
                    throw new Exception(string.Format("Не удалось сформировать коллекцию метаданных для таблицы {0}.", tableName));
                }
                metadataRows.Add(resultRow);
            }

            return(metadataCollection);
        }
예제 #3
0
        /// <summary>
        /// Возвращает метаданные существующей в базе данных таблицы.
        /// </summary>
        /// <param name="tableName">Название таблицы.</param>
        /// <returns></returns>
        public DataRow GetTableData(string tableKey, string tableName)
        {
            if (string.IsNullOrEmpty(tableName))
            {
                throw new ArgumentNullException("tableName");
            }

            string tableNameLow = tableName.ToLower();

            DataRow tableData = null;

            //используем совместные данные всех таблиц только при первом вызове и установленном флаге контекста подключений ExtractSummaryTablesMetadata.
            string extractingKey          = string.Format("{0}.{1}", tableKey, tableName).ToLower();
            bool   extractSummaryMetadata = this.Connection.Context.IsSummaryTablesMetadataContext && !__extracted_TablesData.ContainsKey(extractingKey) && !this.IsRenamedTable(tableName);

            if (!extractSummaryMetadata)
            {
                string query = @"
SELECT name AS [Name] FROM sys.tables WITH(NOLOCK)
WHERE name = N'{TableNameText}'"
                               .ReplaceKey("TableNameText", tableName.QueryEncode());

                tableData = this.DataAdapter.GetDataRow(query);
            }
            else
            {
                if (!__init_TablesData)
                {
                    _TablesData = new Dictionary <string, DataRow>();

                    //получаем метаданные всех таблиц.
                    string query = @"
--получение метаданных таблиц базы {DatabaseName}
SELECT name AS [Name] FROM sys.tables WITH(NOLOCK)"
                                   .ReplaceKey("DatabaseName", this.Connection.DisplayName)
                    ;

                    DataTable dtResult = this.DataAdapter.GetDataTable(query);
                    foreach (DataRow resultRow in dtResult.Rows)
                    {
                        string anyTableName = DataRowReader.GetStringValue(resultRow, "Name");
                        if (string.IsNullOrEmpty(anyTableName))
                        {
                            continue;
                        }

                        string anyTableNameLow = anyTableName.ToLower();
                        if (!_TablesData.ContainsKey(anyTableNameLow))
                        {
                            _TablesData.Add(anyTableNameLow, resultRow);
                        }
                    }

                    __init_TablesData = true;
                }

                //получаем метаданные таблицы из общей выборки.
                if (_TablesData.ContainsKey(tableNameLow))
                {
                    tableData = _TablesData[tableNameLow];
                }

                if (!__extracted_TablesData.ContainsKey(extractingKey))
                {
                    __extracted_TablesData.Add(extractingKey, true);
                }
            }
            return(tableData);
        }
예제 #4
0
 public string GetStringValue(string columnName)
 {
     string typedValue = DataRowReader.GetStringValue(this.Row, columnName);
     return typedValue;
 }