Leichte schreibgeschützte Alternative zu DataTable zum Speichern von Daten aus SqlDataReader?

StackOverflow https://stackoverflow.com/questions/1811870

  •  06-07-2019
  •  | 
  •  

Frage

ich benutze SqlDataReader um Daten vom SQL Server zu lesen.Manchmal möchte ich meine Daten jedoch im Speicher zwischenspeichern schreibgeschützt, leicht, verbindungsfrei Objekt.Ich konnte im BCL keine Optionen für mich finden.Muss ich meine eigene Implementierung eines solchen Containers schreiben oder sind welche verfügbar?

Welche Alternativen habe ich, um Daten aus der Datenbank in kompakter Form zu speichern?Für mich Datentabelle ist überhaupt kein Kandidat.

BEARBEITEN:

Wenn ich weiß, welche Daten ich auswähle, kann ich meinen Leser problemlos mit LINQ umwandeln List<T> oder so.Stattdessen möchte ich in der Lage sein, Daten zwischenzuspeichern, deren Struktur ich nicht kenne.

War es hilfreich?

Lösung

List<object[]>

scheint so leicht wie möglich zu sein.

Und wenn Sie mehr Funktionalität wünschen (z. B. Spaltennamen, Datenbindungsunterstützung, Sortierung, Filterung), können Sie diese Funktionalität ableiten/kapseln und hinzufügen.

Ihre Anforderung ist eher vage.Was bedeutet Leichtgewicht?Was ist an DataTable ungeeignet?Welche von DataTable bereitgestellten Funktionen benötigen Sie?

Andere Tipps

Erstellen Sie Ihre eigene Datenstruktur.

Die BCL sollte nicht alles für alle Menschen sein. Es besteht aus Bausteinen. Die BCL enthält die Bausteine, die Sie benötigen, um Ihre eigene Datenstruktur zu erstellen.

Wenn die BCL Lösungen für jedes Problem enthielt, wäre dies ein aufgeblähtes Chaos. Nicht jedes Stück Funktionalität sollte "aus dem Regal" verfügbar sein, andernfalls gibt es für Sie als Programmierer keinen Wert mehr.

Sie scheinen ziemlich klare Anforderungen zu haben, die sich von "normalen" Verwendungsmustern unterscheiden. Zwischen Datensätzen und Ormen geht die große Mehrheit der Projekte ohne die Funktionalität, die Ihre Anforderungen erfordern, gut aus.

Sie können verwenden List<Dictionary<String, Object>>, wobei der Wörterbuchschlüssel Spaltenname und Wert ist der Zellwert.

Wenn Sie viele Zeilen haben, können Sie Spaltennamen in die Spaltennamen trennen List<String> und Werte List<List<Object>> (oder Array).

Die beste Wahl wäre, einen Typ zu haben, der Ihre Datenspalten darstellt, und dann einfach eine Instanz dieser Klasse für jede Zeile zu erstellen, ihre Eigenschaften mit den Werten des Lesers zu füllen und die Instanzen in einem zu speichern List<YourClass> Struktur.

Etwas wie:

using(SqlDataReader rdr = sqlCommand.ExecuteReader())
{
    List<YourClass> resultList = new List<YourClass>();

    while(rdr.Read())
    {
         YourClass work = new YourClass();

         // set the properties        
         work.Property1 = rdr["Column1"].Value;
         .....
         work.PropertyN = rdr["ColumnN"].Value;

         resultList.Add(work);
    } 
} 

Dies liegt im Grunde genommen im Kern, was ORM (Objekt -Relational Mapper) tut. Lesen Sie die Daten aus der Datenbank mit dem schnellstmöglichen Weg (DataReader) und konstruieren .NET -Objekte daraus.

Marc

Benutze das:

List<string> Variable1 = new List<string>();
//Do something with the generic

string[] MyArray = Variable1.ToArray();

Dies ist das Muss leicht und effizient, um in den Speicher zu sparen.

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