Laden...

Spaltennamen von tabelle auslesen

Erstellt von Loewchen0507 vor 16 Jahren Letzter Beitrag vor 16 Jahren 9.943 Views
Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren
Spaltennamen von tabelle auslesen

Hi,

ich programmiere mit VS2005 und arbeite mit SQL Server 2005 und Access... ich bin zur Zeit ein bisschen am rumspielen und versuche ein paar Sachen herauszufinden... ich habe es geschafft verbindungen herzustellen zu einer accessdatenbank und zu einem sql server... ich habe es geschafft mir dort die datenbanken und auch die tabellennamen der entsprechenden datenbanken anzeigen zu lassen... nun habe ich gedacht... das müsste ja auch mit den spaltennamen gehen... also... ich möchte mir einmal für eine tabelle auf dem sqlserver und einmal für eine tabelle einer accessdatenbank alle spaltennamen anzeigen lassen...

ich habe ein wenig geschaut und habe gedacht ich mache es mit der dataset klasse... aber ich habe noch nicht gefunden wie ich einem dataset eine bereitsbestehende tabelle zuordnen kann... vielleicht könnt ihr mir hier ja einen tip geben...

LG Loewchen

476 Beiträge seit 2004
vor 16 Jahren

hallo Loewchen0507,

ich habe nicht genau verstanden was du nun wissen wolltest, allerdings wirst du in unserem Forum zu allem fündig 😄...

zum Beispiel:
Das Dataset-Objekt
Tabellen- und Spalteninformationen aus dem SQL Server auslesen - FAQ
Die Suche liefert noch mehr...

...wie gesagt, ich weiss nicht genau wo Du stehst um Dich da abholen zu können, aber wenn dir die obigen Tipps nicht weiterhelfen, dann bitte nochmal versuchen das Problem näher einzugrenzen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

3.825 Beiträge seit 2006
vor 16 Jahren

Eine zweite Möglichkeit, die mit allen Datenbanken funktioniert, lautet :

Ein Dataset mit der Tabelle laden und dann

foreach (DataColumn col in ds.Tables["table1"].Columns)
{
    string fname = col.ColumnName;
    string ftyp = col.DataType.ToString();
}

Und eine dritte :
Einen Datareader öffnen und dann


DataTable dt = dr.GetSchemaTable();				// GetSchemaTable Columns : 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 
foreach (DataRow rw in dt.Rows)
{
    string fname2 = rw["ColumnName"].ToString();
    int fsize = (int)rw["ColumnSize"];
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Hi...

danke Euch... hat soweit geklappt...

meine Lösungen für SQL und ACCESS, falls es jemanden interessiert sieht wie folgt aus:


        private List<string> GetAllColumnsSQL(string conString, List<string> tables)
        {
            List<string> columns = new List<string>();
            OdbcDataReader SQLReader;
            String tab = "";

            OdbcConnection connection = new OdbcConnection(conString);
            connection.Open();

            for (int i = 0; i < tables.Count; i++)
                if (i == 0)
                    tab = "table_name = '" + tables[i] + "'";
                else
                    tab = tab + " or table_name = '" + tables[i] + "'";
            
            String SQLStr = "SELECT COLUMN_NAME, DATA_TYPE, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE " + tab + ";";
            OdbcCommand SQLCommand = new OdbcCommand(SQLStr, connection);
            SQLCommand.CommandType = CommandType.Text;
            SQLReader = SQLCommand.ExecuteReader();
            
            if (SQLReader.HasRows)
                while (SQLReader.Read())
                    columns.Add(SQLReader[2].ToString() + "." + SQLReader[0].ToString());

            SQLReader.Close();
            connection.Close();

            return columns;
        }

und Access:
(hier kann ich entweder tabellennamen oder spaltennamen holen)


        private static List<string> GetSchemaAccess(string connectionString, List<string> tablename)
        {
            // Liest alle Tabellen der Access-Datenbank
            List<string> tables = new List<string>();
            OleDbConnection connection = new OleDbConnection(connectionString);

            connection.Open();

            if (tablename.Count == 0) // gib tabellen zurück
            {
                DataTable dataTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, null });
                for (int i = 0; i < dataTable.Rows.Count; i++)
                    if (dataTable.Rows[i]["TABLE_TYPE"].ToString() == "TABLE")
                        tables.Add(dataTable.Rows[i]["TABLE_NAME"].ToString());
            }
            else // gib spaltennamen zurück
            {
                DataTable test = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, null, null });
                foreach (string s in tablename)
                    for (int i = 0; i < test.Rows.Count; i++)
                        if (test.Rows[i]["TABLE_NAME"].ToString() == s)
                            tables.Add(s + "." + test.Rows[i]["COLUMN_NAME"].ToString());
            }

            connection.Close();
            return tables;
        }

für Verbesserungsvorschläge bin ich jederzeit zu haben...
ansonsten werde ich mal ein bisschen weiter spielen und mal gucken was noch alles geht... da werde ich so ab und zu mit sicherheit wieder auf euch zurück kommen...

LG Loewchen