107 Stimmen

Wie erhält man die Anzahl der Zeilen mit SqlDataReader in C#

Meine Frage ist, wie man die Anzahl der Zeilen, die von einer Abfrage mit SqlDataReader in C#. Ich habe einige Antworten zu diesem Thema gesehen, aber keine war klar definiert, außer einer, die besagt, dass man eine while-Schleife mit Read() Methode und erhöhen einen Zähler.

Mein Problem ist, dass ich versuche, ein mehrdimensionales Array mit der ersten Zeile zu füllen, die die Spaltenüberschrift Namen und jede Zeile nach, dass die Zeilendaten zu sein.

Ich weiß, dass ich nur Dump das Zeug in einer Liste-Steuerelement und nicht darum kümmern, aber für meine eigenen persönlichen Erbauung und ich möchte auch die Daten in und aus dem Array ziehen, wie ich wählen und es in verschiedenen Formaten anzeigen.

Ich glaube also, ich kann nicht die Read() und dann den ++ Weg zu erhöhen, weil das bedeutet, dass ich die Read() und öffnen Sie dann Read() erneut, um die Anzahl der Zeilen und dann der Spalten zu erhalten.

Das ist nur ein kleines Beispiel für das, was ich meine:

int counter = 0;    

while (sqlRead.Read())
{
    //get rows
    counter++
}

und dann eine for-Schleife, die die Spalten durchläuft und

something.Read();

int dbFields = sqlRead.FieldCount;

for (int i = 0; i < dbFields; i++)
{
   // do stuff to array
}

1voto

Pit Ming Punkte 389

Ich auch eine Situation konfrontiert, wenn ich brauchte, um ein Top-Ergebnis zurückzukehren, sondern wollte auch die gesamten Zeilen zu erhalten, die wo die Abfrage übereinstimmen. ich endlich zu dieser Lösung zu erhalten:

   public string Format(SelectQuery selectQuery)
    {
      string result;

      if (string.IsNullOrWhiteSpace(selectQuery.WherePart))
      {
        result = string.Format(
@"
declare @maxResult  int;
set @maxResult = {0};

WITH Total AS
(
SELECT count(*) as [Count] FROM {2}
)
SELECT top (@maxResult) Total.[Count], {1} FROM Total, {2}", m_limit.To, selectQuery.SelectPart, selectQuery.FromPart);
      }
      else
      {
        result = string.Format(
@"
declare @maxResult  int;
set @maxResult = {0};

WITH Total AS
(
SELECT count(*) as [Count] FROM {2} WHERE {3}
)
SELECT top (@maxResult) Total.[Count], {1} FROM Total, {2} WHERE {3}", m_limit.To, selectQuery.SelectPart, selectQuery.FromPart, selectQuery.WherePart);
      }

      if (!string.IsNullOrWhiteSpace(selectQuery.OrderPart))
        result = string.Format("{0} ORDER BY {1}", result, selectQuery.OrderPart);

      return result;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X