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
Antwort
Zu viele Anzeigen?
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;
}
}
}
}
- See previous answers
- Weitere Antworten anzeigen
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!