我打電話給多個結果集(總是2)並將結果寫入單獨文件(以管道分隔格式)的存儲過程。我無法將結果集分成單獨存儲的特效。我正在使用IDataReader和IEnumerable在內存中保持儘可能少的內容。更好的方式來使用IEnumerable <IEnumerable <string>>
是否有比使用GetEnumerator/MoveNext/Current去內部IEnumerable<string>
傳遞給File.AppendAllLines更簡單的方法來使用我的IEnumerable<IEnumerable<string>>
?
public void Execute()
{
var reader = GetLines();
using (var enumerator = reader.GetEnumerator())
{
enumerator.MoveNext();
File.AppendAllLines("file1.dat", enumerator.Current);
enumerator.MoveNext();
File.AppendAllLines("file2.dat", enumerator.Current);
}
}
public IEnumerable<IEnumerable<string>> GetLines()
{
Database db = DatabaseFactory.CreateDatabase("connectionStringKey");
using (var command = db.GetStoredProcCommand("getdata_sp"))
{
var reader = db.ExecuteReader(command);
yield return GetInnerEnumerable(reader);
reader.NextResult();
yield return GetInnerEnumerable(reader);
}
}
private IEnumerable<string> GetInnerEnumerable(IDataReader reader)
{
while (reader.Read())
{
object[] rowValues = new object[reader.FieldCount];
reader.GetValues(rowValues);
yield return String.Join("|", rowValues);
}
}
也許我不清楚命名方法GetLines() - 它返回IEnumerable>。應該叫它GetReaders() –
foson
2011-03-29 20:40:14