Реализация Stream для чтения из SqlDataReader - C#
Формулировка задачи:
Нужен метод, который преобразует некоторые данные на входе (SqlDataReader) и возвращает Stream
То, что я написал ниже - полная лажа, так как Stream возвращается только в конце, но как сделать правильно, не знаю.
Для архивации потока использую Ionic.Zip
Нужно чтоб работало так:
Stream SaveSqlReaderToStream(SqlDataReader Reader) { Stream Return = new TMemoryStream() while(Reader.Read) { //читаем Reader и пишем в Return } return Return; }
ZipFile zip = new ZipFile(); Далее zip.AddEntry("data.txt", myStream);
zip.AddEntry("data.txt", SaveSqlReaderToStream(Reader));
Решение задачи: «Реализация Stream для чтения из SqlDataReader»
textual
Листинг программы
using (ZipFile zip = new ZipFile()) { Stream stream = new MemoryStream(); zip.AddEntry("text.txt", stream); stream.Write(new byte[] { 0xFF, 0xFE }, 0, 2); byte[] buffer = new byte[15000]; using (SqlConnection Conn = new SqlConnection("Server=alpha;Database=ReferInfo;Integrated Security=false;User ID=sa;Pwd=Oj7s0Kde")) { Conn.Open(); using (SqlCommand Cmd = new SqlCommand("select * from T_DEF order by [id]", Conn)) { SqlDataReader reader = Cmd.ExecuteReader(); string Delimiter = "\t"; string Terminator = "\n"; Encoding enc = Encoding.Unicode; while (reader.Read()) { string Field = ""; for (int i = 0; i < reader.FieldCount; i++) { switch (reader[i].GetType().ToString()) { case "System.DateTime": Field = ((DateTime)reader[i]).ToString("yyyy-MM-dd HH:mm:ss"); break; case "System.Decimal": Field = reader[i].ToString().Replace(",", "."); break; case "System.Double": Field = reader[i].ToString().Replace(",", "."); break; default: Field = reader[i].ToString().Replace(Delimiter, " ").Replace("\r", " ").Replace("\n", " ").Replace(" ", " "); if (Field.Length > 5000) Field = Field.Substring(1, 5000); break; } if (i != reader.FieldCount - 1) Field += Delimiter; else Field += Terminator; int cnt = enc.GetBytes(Field, 0, Field.Length, buffer, 0); stream.Write(buffer, 0, cnt); stream.Flush(); } } reader.Close(); } } zip.Save(@"c:\test.zip"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д