MS SQL Server - Spalteninformationen auslesen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von hirnwunde.

    MS SQL Server - Spalteninformationen auslesen

    Hi Leute,

    bei dem Versuch die Spalteninformationen (Spaltennamen) auszulesen bekomme ich folgende Fehlermeldung:

    "OutOfMemoryException wurde nicht behandelt."
    "Eine Ausnahme vom Typ "System.OutOfMemoryException" wurde ausgelöst."

    Hier der Code:

    C#-Quellcode

    1. string sSpalteninformation = "";
    2. OdbcCommand cmd = new OdbcCommand("SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'KHKAdressen'", verbindung);
    3. //cmd (Command) ausführen
    4. OdbcDataReader reader = cmd.ExecuteReader();
    5. while (reader.Read())
    6. {
    7. intAnzahl++;
    8. sSpalteninformation += sSpalteninformation + reader.GetValue(0) + ",";
    9. }


    Der Query funktioniert bei der Ausführung im MS SQL-Server einwandfrei. Er listet mir alle Spaltennamen der Tabelle KHKAdressen untereinander auf.

    Ich kann nicht nachvollziehen warum er sich so komisch in der while-Schleife verhält.

    Der String sSpalteninformation bekommt eine völlig falsche Zeichenkette zugeordnet:

    Adresse,Adresse,Mandant,Adresse,Adresse,Mandant,Kategorie, Adresse,Adresse,Mandant,Adresse,Adresse,Mandant,Kategorie,Matchcode, Adresse,
    Adresse,Mandant,Adresse,Adresse,Mandant,Kategorie,Adresse,Adresse,Mandant, Adresse,Adresse,Mandant,Kategorie,Matchcode,Anrede,

    Richtig wäre:
    Adresse, Mandant, Kategorie, Matchcode, Anrede,...

    Habt ihr eine Idee warum es sich so verhält? ?(

    Gruß
    Das riecht nach Rekursion.
    Deswegen auch die OutOfMemory-Exception.

    Vorausgesetzt, die Table beinhaltet schon einen Eintrag, funktioniert:

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class Form1
    3. Dim ConnectionToMySql As Boolean = False
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. Dim con As MySqlConnection
    6. Dim cmd As MySqlCommand
    7. Dim rdr As MySqlDataReader
    8. Dim connstring As String = "Server=192.168.2.254; User ID=########; Password=#####; Database=#####"
    9. con = New MySqlConnection(connectionString:=connstring)
    10. Try
    11. con.Open()
    12. ConnectionToMySql = True
    13. Catch ex As Exception
    14. MessageBox.Show(ex.Message)
    15. ConnectionToMySql = False
    16. End Try
    17. Dim QuerySQL As String = "SELECT * FROM `TABELLE` WHERE `FOO` = '1' AND `BAR` = '22';"
    18. Dim spaltennamen As String = ""
    19. Try
    20. cmd = New MySqlCommand(QuerySQL, con)
    21. rdr = cmd.ExecuteReader
    22. For cnt As Integer = 0 To rdr.FieldCount - 1
    23. spaltennamen = spaltennamen + rdr.GetName(cnt) + "; "
    24. Next
    25. MessageBox.Show(spaltennamen)
    26. spaltennamen = ""
    27. Catch ex As MySqlException
    28. MessageBox.Show("uups")
    29. End Try
    30. End Sub
    31. End Class


    Ja, das ist VB und kein C#.
    Ja, das ist MySql und nicht MsSql.
    Beides sollte aber leicht umzumünzen sein.