Bir veri okuyucu akışı oluşturdum ve sonuçları bir dosyaya yazmaya çalışıyorum. Bu tablo potansiyel olarak milyonlarca kayıt döndürebileceğinden, birden fazla dosyaya yazmak istedim, böylece sorunları olmadan bir metin düzenleyicide açabildim. Dosya çok büyük olduğu için metin editörü çöküyor. İşte kabaca benim şu an sahip olduğum şey.SqlDataReader'dan Birden Çok Dosya Yazma
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
}
}
}
}
Bunu açıp her kayıt için dosyaya bağlantıyı kapatmak çünkü okuyucu döngüye kullanarak yazar deyimi taşımak istemiyoruz. Konumumu okuyucuda nasıl tutacağımı ve sadece gerektiğinde dosyaları açıp kapatacağınıza dair herhangi bir fikir var mı?
Bunu yaptığım gibi bir fikrim vardı. Yazan yazar bloğu yerine StreamWriter'i kendim yönetebilir miyim? StreamWriter writer = new StreamWriter (stream.Open()) 'gibi, daha sonra bağlantıyı yönetmek için son olarak blokları denediniz. – adam
Neden bir FileSteam ve bir StreamWriter'e ihtiyacınız var. Yeni bir StreamWriter içinde bir stream.Open() koymak size aynı anda iki açılır verir ve sonra kapatmaya ve yeniden açmaya çalıştığınızda sorunlara neden olur. – jdweng