我创建了一个数据读取流,现在想将结果写入文件。由于这个表可能会返回数百万条记录,所以我想将它们写入多个文件,这样我就可以在文本编辑器中打开它们,而不会出现问题,例如:文本编辑器因文件过大而崩溃。以下是我的大致代码:
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
}
}
}
}
我不想把using writer语句放进读取循环中,因为那样会为每条记录打开和关闭文件连接。有没有什么办法可以使我的位置保持在读取器中,并且只在需要时打开和关闭文件呢?
StreamWriter writer = new StreamWriter(stream.Open())
,然后使用try finally块来管理连接。 - adam