Ich habe einen Datenreader-Stream erstellt und ich versuche, die Ergebnisse in eine Datei zu schreiben. Da diese Tabelle möglicherweise Millionen von Datensätzen zurückgeben könnte, wollte ich in mehrere Dateien schreiben, damit ich sie in einem Texteditor ohne die Probleme öffnen konnte, dh. Der Texteditor stürzt ab, weil die Datei zu groß ist. Hier ist ungefähr mein was ich jetzt habe.Schreiben mehrerer Dateien aus SqlDataReader
using (var connection = new SqlConnection(connectionString))
using (var stream = new FileStream("directoryLocation", FileMode.Create))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = "Select * from tblTemp";
connection.Open();
using(SqlDataReader reader = command.ExecuteReader())
{
var tableName = "tblTemp";
var fileName = tableName + ".txt";
var recordCount = 0;
var fileCount = 0;
using (StreamWriter writer = new StreamWriter(stream.Open()))
{
while(reader.Read())
{
if(recordCount == 500000)
{
// Right here. Need to figure out how to close old file start new
recordCount = 0;
writer.Close();
fileName = tableName + "_" + (++fileCount).ToString() + ".txt";
writer = new StreamWriter(fileName); // I know this doesn't work. Just sudo code
}
recordCount++;
writer.WriterLine(recordInfo); // recordInfo is sudo code as well
}
}
}
}
Ich will nicht die Verwendung von Schreiber Anweisung in die Leser-Schleife bewegen, denn das würde die Verbindung zur Datei für jeden Datensatz öffnen und schließen. Irgendwelche Ideen, wie ich meine Position im Leser behalten und Dateien nur bei Bedarf öffnen und schließen kann?
Gerade als ich das postete hatte ich eine Idee. Könnte ich den StreamWriter nicht einfach über den Writerblock selbst verwalten? Wie 'StreamWriter writer = new StreamWriter (stream.Open())' dann try finally blocks um die Verbindung zu verwalten. – adam
Warum brauchen Sie sowohl einen FileSteam als auch einen StreamWriter? Einen Stream einfügen.Open() in einem neuen StreamWriter gibt Ihnen zwei Ops gleichzeitig, was zu Problemen beim Schließen und erneuten Öffnen führt. – jdweng