3 Stimmen

Zweimal durch einen DataReader iterieren

Ich muss zweimal durch einen DataReader iterieren. Gibt es eine Möglichkeit, dies zu tun, ohne DataSets zu verwenden und ohne die Abfrage zweimal auszuführen? Ich bin mit C#, übrigens.
Gracias

0 Stimmen

Warum versuchen Sie, DataSets zu vermeiden? Wenn es sich um ein Leistungsproblem handelt, sollten Sie sich das ItemArray der DataRow-Objekte ansehen. Die Verwendung von ItemArray anstelle des Spaltenindexers kann viel schneller sein.

0 Stimmen

Es sind mehrere hunderttausend Zeilen. Ich werde es mir ansehen, danke!

0voto

Mario Levesque Punkte 956

Spät im Spiel, aber hier ist etwas Code, der bei der Iteration durch einen Datensatz hilft. Und um der Frage gerecht zu werden, ist dies kein Datareader, sondern ein Dataset, wie einige vorgeschlagen haben. Ich iteriere nur einmal, aber Sie können zweimal durch den Datensatz iterieren, oder so oft wie Sie möchten :) Vielen Dank

...

        StringBuilder VBAstrBldr = new StringBuilder();
        List<object> objects = new List<object>();
        string destPath = string.Empty;
        string _filePath = string.Empty;
        string timestampSuffix = string.Empty;

...

    string commandTextDC = @" SELECT  [CategoryID]
                                    ,[AreaNo]
                                    ,[CategoryDesc]
                                    ,[CategoryNo]
                                    ,[CatCodeDisableDate]
                                    ,[CatCodeDeprecateDate]
                            FROM [dbo].[Categories] ";

...

using (var connection = new SqlConnection(_dbLogConn))
{
    connection.Open();
    using (var tran = connection.BeginTransaction())
    {
        using (var command = new SqlCommand(commandTextDC, connection, tran))
        {
            try
            {
                var adapter = new SqlDataAdapter(command);
                DataSet thedataSet = new DataSet();
                adapter.Fill(thedataSet);

                VBAstrBldr.Clear();

                foreach (DataTable table in thedataSet.Tables)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        VBAstrBldr.Append(Environment.NewLine);
                        foreach (DataColumn column in table.Columns)
                        {
                            object item = row[column];
                            // read column and item
                            VBAstrBldr.Append("columnName: " + column.ColumnName.ToString() + " Value: " + item.ToString());
                            VBAstrBldr.Append(Environment.NewLine);
                        }
                    }
                }

                _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
                destPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "VBAwithDC" + timestampSuffix + ".txt");

                using (StreamWriter sw = new StreamWriter(System.IO.File.Create(destPath)))
                {
                    sw.Write(VBAstrBldr);
                }
            }
            catch (Exception Ex)
            {
                string msg = Ex.Message.ToString();
                tran.Rollback();
                throw;
            }
        }
    }
}

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