Получить имя столбца в C #

Я искал SO о том, как получить имя столбца, и я попробовал некоторые решения, но когда я использую этот метод, например, я получаю эти имена столбцов, а не мои фактические имена столбцов (идентификатор, статус, заголовок и т. Д.):

  • ТАБЛИЦА_КАТАЛОГ
  • ТАБЛИЦА_СХЕМА
  • ТАБЛИЦА ИМЯ
  • TABLE_TYPE

     using (SqlConnection connection = new SqlConnection(this.ConnectionString))
          {
    
            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder.ConnectionString = this.ConnectionString;
            string server = builder.DataSource;
            string database = builder.InitialCatalog;
    
            connection.Open();
            DataTable schema = connection.GetSchema("Tables");
            Tables = new List<Table>();
            foreach (DataRow row in schema.Rows)
            {
                /* Add Table */
                Table t = new Table();
                string tableName = row[2].ToString();
                t.Name = tableName;
    
                /* Add columns */
                //DataTable dtCols = connection.GetSchema("Columns", new[] { "StarTrackerDB", null, "dbo.Tickets" });
                t.Columns = new List<Column>();
    
                foreach (DataColumn column in row.Table.Columns)
                {
                    Column c = new Column();
                    c.Name = column.ColumnName;
                    t.Columns.Add(c);
                }
    
                Tables.Add(t);
            }
        }
    

РЕДАКТИРОВАТЬ:

Я хочу получить его на C #, т.е. не выполнять строку запроса SQL в моем коде.

РЕДАКТИРОВАТЬ2

Токовый выход:

  • ТАБЛИЦА_КАТАЛОГ
  • ТАБЛИЦА_СХЕМА
  • ТАБЛИЦА ИМЯ
  • TABLE_TYPE

Ожидаемый результат:

  • ID
  • Статус
  • Заголовок

и т.д. названия столбцов в таблицах. string tableName установлен правильно.


person Westerlund.io    schedule 10.09.2015    source источник
comment
возможный дубликат SQL Server: как сделать вы возвращаете имена столбцов из таблицы?   -  person Glen Thomas    schedule 11.09.2015
comment
Публикация результатов (фактических и желаемых) очень поможет   -  person Mechanic    schedule 11.09.2015
comment
Это указано в описании, но здесь это повторяется снова: я получаю эти имена столбцов, а не мои фактические имена столбцов (идентификатор, статус, заголовок и т. Д.): [Вывод] Я попытаюсь перефразировать его, если его трудно понять.   -  person Westerlund.io    schedule 11.09.2015
comment
Вы ищете метаданные. Может быть, это поможет вам начать stackoverflow.com/questions/22053829/   -  person Jasen    schedule 11.09.2015


Ответы (2)


Я отредактировал ваш код и смог получить таблицы и столбцы с приведенным ниже кодом.

   public void testeStackOverflow()
    {
        using (SqlConnection connection = new SqlConnection(this.ConnectionString))
        {

            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder.ConnectionString = this.ConnectionString;
            string server = builder.DataSource;
            string database = builder.InitialCatalog;

            connection.Open();


            DataTable schemaTables = connection.GetSchema("Tables");

            foreach (System.Data.DataRow rowTable in schemaTables.Rows)
            {
                String TableName = rowTable.ItemArray[2].ToString();

                string[] restrictionsColumns = new string[4];
                restrictionsColumns[2] = TableName;
                DataTable schemaColumns = connection.GetSchema("Columns", restrictionsColumns);

                foreach (System.Data.DataRow rowColumn in schemaColumns.Rows)
                {
                    string ColumnName = rowColumn[3].ToString();
                }
            }


        }
    }
person Community    schedule 11.09.2015
comment
Большое спасибо, дорогой сэр, это работает как шарм! - person Westerlund.io; 11.09.2015

Получить информацию о схеме всех столбцов в текущей базе данных

DataTable allColumnsSchemaTable = connection.GetSchema("Columns");

Вы можете указать каталог, схему, имя таблицы, имя столбца, чтобы получить указанные столбцы. Вы можете использовать четыре ограничения для столбца, поэтому вы должны создать массив из 4 элементов. Для массива 0-член представляет Каталог; 1-член представляет схему; 2-член представляет имя таблицы; 3 элемента представляют имя столбца.

например получить столбцы для таблицы MyTable:

String[] columnRestrictions = new String[4];
columnRestrictions[2] = "MyTable";
DataTable myTableSchemaTable = connection.GetSchema("Columns", columnRestrictions);

Чтобы получить данные из этих таблиц:

var columnDetails = from info in table.AsEnumerable()
                         select new {
                            TableCatalog = info["TABLE_CATALOG"],
                            TableSchema = info["TABLE_SCHEMA"],
                            TableName = info["TABLE_NAME"],
                            ColumnName = info["COLUMN_NAME"],
                            DataType = info["DATA_TYPE"]
                         };

Получить информацию о схеме всех столбцов IndexColumns в текущей базе данных

DataTable allIndexColumnsSchemaTable = connection.GetSchema("IndexColumns");

Вы можете указать каталог, схему, имя таблицы, имя ограничения, имя столбца, чтобы получить указанные столбцы. Вы можете использовать пять ограничений для столбца, поэтому вы должны создать массив из 5 элементов. Для массива 0-член представляет Каталог; 1-член представляет схему; 2-член представляет имя таблицы; 3 члена представляет имя ограничения; 4 элемента представляют имя столбца.

String[] indexColumnsRestrictions = new String[5];
indexColumnsRestrictions[2] = "Course";
indexColumnsRestrictions[4] = "CourseID";
DataTable courseIdIndexSchemaTable = connection.GetSchema("IndexColumns", indexColumnsRestrictions);

Чтобы получить данные из этих таблиц:

var columnDetails = from info in indexColumnsTable.AsEnumerable()
                     select new {
                        TableSchema = info["table_schema"],
                        TableName = info["table_name"],
                        ColumnName = info["column_name"],
                        ConstraintSchema = info["constraint_schema"],
                        ConstraintName = info["constraint_name"],
                        KeyType = info["KeyType"]
                     };
person Glen Thomas    schedule 11.09.2015