Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Spaltennamen von tabelle auslesen
Loewchen0507
myCSharp.de - Member

Avatar #avatar-2112.jpg


Dabei seit:
Beiträge: 292
Herkunft: Hamburg

Themenstarter:

Spaltennamen von tabelle auslesen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Loewchen0507,

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

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
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3777
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Loewchen0507
myCSharp.de - Member

Avatar #avatar-2112.jpg


Dabei seit:
Beiträge: 292
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers