it-swarm.com.de

Rufen Sie den Spaltennamen von SQL Server ab

Ich versuche, die Spaltennamen einer Tabelle abzurufen, die ich in SQL Server 2008 R2 gespeichert habe.

Ich habe alles buchstäblich ausprobiert, aber ich finde nicht, wie ich das machen kann.

Im Moment ist dies mein Code in C #

public string[] getColumnsName()
{
        List<string> listacolumnas=new List<string>();

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

Aber das bringt mir folgendes zurück

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

Irgendwelche Ideen?

Es zeigt die <string>-Tags, da mein Webservice die Daten auf diese Weise sendet.

Sie können die folgende Abfrage verwenden, um die Spaltennamen für Ihre Tabelle abzurufen. Die folgende Abfrage ruft alle Spalten für eine Benutzertabelle mit einem bestimmten Namen ab:

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'

In Ihrem Code wird es so aussehen:

public string[] getColumnsName()
{
    List<string> listacolumnas=new List<string>();
    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();
}
19
Szymon

Normalerweise verwende ich die GetSchema-Methode, um spaltenspezifische Informationen abzurufen. Dieser Ausschnitt gibt die Spaltennamen in einer Stringliste zurück:

        using (SqlConnection conn = new SqlConnection("<ConnectionString>"))
        {
            string[] restrictions = new string[4] { null, null, "<TableName>", null };
            conn.Open();
            var columnList = conn.GetSchema("Columns", restrictions).AsEnumerable().Select(s => s.Field<String>("Column_Name")).ToList();
        }
17
Mark Kram
SELECT COLUMN_NAME
FROM   
INFORMATION_SCHEMA.COLUMNS 
WHERE   
TABLE_NAME = 'YourTable' 
6
public string[] getColumnsName()
    {
        List<string> listacolumnas=new List<string>();
        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();
    }
3
M.Ali
sp_columns - http://technet.Microsoft.com/en-us/library/ms176077.aspx

Für diese Art von Dingen gibt es viele integrierte Prozeduren. 

1
jcwrequests

Der ursprüngliche Beitrag war nahe am Ziel. Nur ein paar kleine Änderungen und du hast es. Hier ist meine Lösung.

   public List<string> GetColumns(string tableName)
    {
        List<string> colList = new List<string>();
        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;
    }
1
Sierra

Derzeit gibt es zwei Möglichkeiten, dies zu tun:

  • In SQL Server SQL können Sie die in INFORMATION_SCHEMA.COLUMNS definierten Ansichten verwenden. Dort müssten Sie die Zeile für Ihre Tabelle auswählen, die in der Spalte TABLE_NAME übereinstimmt.
  • Da Sie C # verwenden, ist es wahrscheinlich einfacher, die Namen von der SqlDataReader-Instanz abzurufen, die von ExecuteReader zurückgegeben wird. Die Klasse stellt eine Eigenschaft FieldCount für die Anzahl der Spalten und eine Methode GetName(int) bereit, die die Spaltennummer als Argument verwendet und den Namen der Spalte zurückgibt.
0
user2880576