Laden...

Exception: Der angegebene Datentyp ist Ungültig, obwohl Rückgabewert dem Variablen-Typ entspricht

Erstellt von prakdi vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.385 Views
P
prakdi Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren
Exception: Der angegebene Datentyp ist Ungültig, obwohl Rückgabewert dem Variablen-Typ entspricht

Mahlzeit mahlzeit,

Bei meinem Versuch mit Hilfe der Deployment Tools Foundation ( man siehe Buch: "Inside Windows Installer 4.5") die Datenbank eines .msi Packetes auszulesen bin ich auf einen Fehler gestoßen der für mich keinen Sinn ergibt.

Und zwar:

an folgender Stelle


private Database fileentries = null;

private void loadGeneralInfo()
{
    // file String-Variable für den Dateipfad
    fileentries = new Database(file, DatabaseOpenMode.ReadOnly);
    try
    {
        foreach (TblClm tb in searchentry)
        {
            for (int i = 0; i < tb.lsColumns.Count; i++)
            {
                String line = "SELECT `"+tb.lsColumns[i] +"` FROM `" + tb.sName + "`";
                IList<String> test=  fileentries.ExecuteStringQuery(line);
                foreach (string st in test)
                {
                    treffer.Add(st);
                }
            }
        }
    }
    catch(Exception exx)
    {
        MessageBox.Show(exx.Message);
        Console.Out.WriteLine(exx.StackTrace.ToString());
    }
}

Laut der Exception.Message ist der Fehler, dass der Datentyp ungültig sei und laut Stacktrace liegt der Fehler in der Zuweisung meiner Variablen test.
Rückgabewert der Methode Database.ExecuteStringQuery(String sql) ist jedoch IList<String>.
Wie kann es also nun sein, dass dort ein ungültiger Datentyp existiert?!

Ich hoffe auf eure Hilfe,

euer Prakdi

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo prakdi,

sicher, dass die Exception nicht schon aus der Methode ExecuteStringQuery kommt und nicht erst bei der Zuweisung entsteht?

Um solche Rückfragen zu vermeiden, beachte bitte [Hinweis] Wie poste ich richtig? Punkt 5 und gibt immer die exakte Meldung an und bei Exception auch den gesamten StackTrace.

herbivore

P
prakdi Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Stacktrace:

bei Microsoft.Deployment.WindowsInstaller.Record.GetString(Int32 field)
bei Microsoft.Deployment.WindowsInstaller.Database.ExecuteStringQuery(String sql, Record record)
bei Microsoft.Deployment.WindowsInstaller.Database.ExecuteStringQuery(String sqlFormat, Object[] args)
bei MSI_Analyzer_Christoph_Bose.frmMSI.loadGeneralInfo() in C:\Dokumente und Einstellungen\christoph\eigene dateien\visual studio 2010\Projects\MSI Analyzer\MSI Analyzer\frmMSI_neu.cs:Zeile 187.

sry, sry kommt nicht wieder vor.
Mir fiel gerade noch auf, der Fehler kommt nicht bei jedem .msi Paket.

916 Beiträge seit 2008
vor 13 Jahren

Gib mal nicht nur die gesamte Exception sonst können wir dir nicht helfen.

Again what learned...

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo prakdi,

gibt immer die exakte Meldung an und bei Exception auch den gesamten StackTrace.

Die bist du uns immer noch schuldig.

Ansonsten trifft meine Annahme von oben zu. Die Exception wir viel tiefer ausgelöst. Mit der Zuweisung hat das gar nichts zu tun. Die wird wegen der Exception nämlich gar nicht mehr ausgeführt.

Vermutlich übergibst du der Methode unzulässige Werte. Oder in dem aufgerufenen Code (also nicht in deinem) steckt noch ein Programmierfehler.

Hallo rollerfreak2,

Gib mal nicht nur die gesamte Exception sonst können wir dir nicht helfen.

Sag besser konkret, was prakdi deiner Meinung nach angeben soll. Ich versteh nämlich auch nicht, was du meinst. Den vollständigen Code brauchen wir aus meiner Sicht jedenfalls nicht.

herbivore

P
prakdi Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Die exakte Meldung ist: Der angegebene Datentyp ist ungültig.

Mehr hab ich nicht an infos.

Was mich wundert ist, das ich vorher den String für die SQL-Query erstelle mit hilfe von den Tabellennamen und Spaltennamen und so doch eigentlich der übergebene Datentyp auch richtig sein sollte oder nicht?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo prakdi,

nochmal: Da tritt ein interner Fehler auf, also zwei Stufen unter ExecuteStringQuery. Also weder direkt bei der Parameterübergabe an der Funktion und auch nicht bei der Rückgabe.

Ich hatte nur gesagt, dass es sein kann, dass der Wert, der übergeben, wird unzulässig ist und dadurch (später) die Exception verursacht. Das heißt nicht, dass der Wert den falschen Datentyp hat.

Im Zusammenhang mit dem im ersten Absatz gesagten möchte ich dich auf [Hinweis] Wie poste ich richtig? Punkt 1.1.1 hinweise. Das hättest du selbst erkennen müssen.

herbivore

P
prakdi Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Stimmt eigentlich,

Na gut danke trotzdem.

Ciao