Frage

Hallo Leute, die Arbeit mit asp.NET und c #, ich bin mit MySQL Connector / NET-Plug-in-Dinge zu einer MySQL-DB verbinden (keine Überraschungen gibt!).

Und das funktioniert gut, kann eine Verbindung, Ausführen von Abfragen etc etc alles schön und gut, aber ist es möglich, eine Hashtable oder ähnlich der Ergebnisse zurück? Speichern läuft ein auf derselben Tabelle beschreiben, um die Spaltennamen zu erhalten und diese Werte verwenden, um die Hash jedes Mal zu erstellen.

Danke,

Psy

War es hilfreich?

Lösung

Der MySQL C / C ++ Verbinder, nehme ich an rund C # gewickelt zu werden (im Vergleich zu in C # erneut implementiert) gibt eine Zwei-dementiellen Anordnung, die Ergebnisse enthält. Dies ist nur die Spalten- und Zeilendaten, nicht die Spaltennamen. Die API gibt auch einen Feld (Spaltenname) Wert durch mysql_fetch_field_direct() - einen separaten Funktionsaufruf, nachdem die Ergebnisse der Abfrage zu erhalten. Auch dies ist ein zweidementiellen Array. Der Stecker selbst enthält keine API für die zwei getrennten Ergebnisse verschmelzenden (Spaltennamen + Spalte / Zeile-Daten) in eine Hash-Tabelle.

Statt eine zweite Abfrage macht die Spaltennamen zu erhalten, alles, was Sie tun müssen, um Anruf mysql_fetch_field_direct() für jede Spalte, wie Sie durch Zuweisen von Werten Fortschritt. Dies gibt Ihnen die Feldnamen zusammen mit den Daten in dieser Spalte / Zeile enthalten ist. An diesem Punkt ist es in den Entwickler bis, wie die Daten zu ordnen, wie es in einer Hash-Tabelle zu speichern, etc.

Ich verwende eine Hilfsfunktion als Wrapper um die Abfrageausführung, die jede Zeile in einem binären Baum mit dem Spaltennamen speichert den Schlüssel zu sein und gibt eine verknüpfte Liste von Bäumen für mich mit dem zu tun, was ich brauche.

Andere Tipps

in .net Sie nur Datentabellen und Datensätze zu erhalten, eine Datentabelle wird aus datarows gemacht, sind diejenigen, sehr, sehr ähnlich wie Hash-Tabellen und in den meisten Fällen können Sie diese verwenden, um die Aufgaben zu erreichen, aber wenn Sie Hash-Tabelle benötigen, können Sie diese verwenden Code

public static Hashtable convertDataRowToHashTable(DataRow dr)
{
    if (dr == null)
    {
        return null;
    }

    Hashtable ret = new Hashtable(dr.Table.Columns.Count);

    for (int iColNr = 0; iColNr < dr.Table.Columns.Count; iColNr++)
    {
        ret[dr.Table.Columns[iColNr].ColumnName] = dr[iColNr];
    }
    return ret;
}

andere Richtung (hast Tabelle datrow) ist nicht so einfach, wie datarow keinen öffentlichen Konstruktor hat (mit Absicht), und Sie müssen rufen newRow = myDataTable.NewRow (); eine neue Instanz von einer Reihe zu bekommen, und als Sie fast wie mit Hash-Tabelle mit der Zeile arbeiten können

newRow["column1"]="some value";

, aber wenn Sie eine neue Spalte in hashtable benötigen Sie Spalte Datentabelle hinzufügen und nicht auf Datenreihe myTable.Columns.Add ( „name“, „type“);

hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top