2015-09-10 4 views
4

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

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • 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); 
         } 
        } 
    

EDIT:

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

EDIT2

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

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • TABLE_TYPE

Ожидаемое из говоря:

  • ID
  • Статус
  • Название

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

+0

возможно дубликат [SQL Server: Как вы вернуть имена столбцов из таблицы] (http://stackoverflow.com/questions/600446/sql-server-how-do-you-return- the-column-names-from-a-table) –

+0

Проводка вывода (актуальная и желаемая) поможет много – Mechanic

+0

Это указано в описании, но здесь оно повторяется: «Я получаю эти имена столбцов, а не мои фактические столбцы namnes (ID, Status, Title и т. Д.): [Output] «Я попытаюсь перефразировать его, если это трудно понять. – Jefecito

ответ

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(); 
       } 
      } 


     } 
    } 
+0

Спасибо, дорогой сэр, он работает как шарм! – Jefecito

1

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

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

Вы можете указать каталог, схемы, имя таблицы, столбец Имя, чтобы получить указанный столбец (ы). Вы можете использовать четыре ограничения для столбца, поэтому вы должны создать массив из четырех элементов. Для массива 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"); 

Вы можете указать каталог , Schema, Table Name, Constraint Name, Column Name, чтобы получить указанные столбцы. Вы можете использовать пять ограничений для столбца, поэтому вы должны создать массив из 5 членов. Для массива 0-элемент представляет каталог; 1-член представляет собой схему; 2-член представляет собой имя таблицы; 3-член представляет Constraint Name; 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"] 
        };