从SQL Server获取列名称

我正在尝试获取我存储在SQL Server 2008 R2中的表的列名。

我真的尝试了一切,但我似乎无法找到如何做到这一点。

现在这是我在C#中的代码

public string[] getColumnsName() { List listacolumnas=new List(); using (SqlConnection connection = new SqlConnection(Connection)) using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "SELECT TOP 0 * FROM Usuarios"; connection.Open(); using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) { reader.Read(); var table = reader.GetSchemaTable(); foreach (DataColumn column in table.Columns) { listacolumnas.Add(column.ColumnName); } } } return listacolumnas.ToArray(); } 

但这让我回到了以下

 ColumnName ColumnOrdinal ColumnSize NumericPrecision NumericScale IsUnique IsKey BaseServerName BaseCatalogName BaseColumnName BaseSchemaName BaseTableName DataType AllowDBNull ProviderType IsAliased IsExpression IsIdentity IsAutoIncrement IsRowVersion IsHidden IsLong IsReadOnly ProviderSpecificDataType DataTypeName XmlSchemaCollectionDatabase XmlSchemaCollectionOwningSchema XmlSchemaCollectionName UdtAssemblyQualifiedName NonVersionedProviderType IsColumnSet 

有任何想法吗?

它显示标记,因为这是我的Web服务发送数据的方式。

您可以使用下面的查询来获取表的列名。 下面的查询获取给定名称的用户表的所有列:

 select c.name from sys.columns c inner join sys.tables t on t.object_id = c.object_id and t.name = 'Usuarios' and t.type = 'U' 

在您的代码中,它看起来像这样:

 public string[] getColumnsName() { List listacolumnas=new List(); using (SqlConnection connection = new SqlConnection(Connection)) using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "select c.name from sys.columns c inner join sys.tables t on t.object_id = c.object_id and t.name = 'Usuarios' and t.type = 'U'"; connection.Open(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { listacolumnas.Add(reader.GetString(0)); } } } return listacolumnas.ToArray(); } 

我通常使用GetSchema方法来检索Column特定的信息,这个片段将返回字符串List中的列名:

  using (SqlConnection conn = new SqlConnection("")) { string[] restrictions = new string[4] { null, null, "", null }; conn.Open(); var columnList = conn.GetSchema("Columns", restrictions).AsEnumerable().Select(s => s.Field("Column_Name")).ToList(); } 
 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTable' 
 public string[] getColumnsName() { List listacolumnas=new List(); using (SqlConnection connection = new SqlConnection(Connection)) using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "select column_name from information_schema.columns where table_name = 'Usuarios'"; connection.Open(; using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) { reader.Read(); var table = reader.GetSchemaTable(); foreach (DataColumn column in table.Columns) { listacolumnas.Add(column.ColumnName); } } } return listacolumnas.ToArray(); } 
 sp_columns - http://technet.microsoft.com/en-us/library/ms176077.aspx 

这类东西有许多内置的存储过程。

目前,我有两种方法可以做到这一点:

  • 在纯SQL Server SQL中,您可以使用INFORMATION_SCHEMA.COLUMNS定义的视图。 在那里,您需要选择表格的行,并在“ TABLE_NAME ”列上进行匹配。
  • 由于您使用的是C#,因此从ExecuteReader返回的SqlDataReader实例中获取名称可能更容易。 该类提供了一个属性FieldCount ,用于列数,以及一个方法GetName(int) ,以列号作为参数并返回列的名称。

原来的post接近目标,只是一些小的变化,你得到了它。 这是我的解决方案。

  public List GetColumns(string tableName) { List colList = new List(); DataTable dataTable = new DataTable(); string cmdString = String.Format("SELECT TOP 0 * FROM {0}", tableName); if (ConnectionManager != null) { try { using (SqlDataAdapter dataContent = new SqlDataAdapter(cmdString, ConnectionManager.ConnectionToSQL)) { dataContent.Fill(dataTable); foreach (DataColumn col in dataTable.Columns) { colList.Add(col.ColumnName); } } } catch (Exception ex) { InternalError = ex.Message; } } return colList; }