Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Тяпниичная задачка.

169  
Murr патриот19.07.18 17:20
Murr
19.07.18 17:20 

Тяпниичная задачка.


В общем - пинаю те же проблемы, что описаны в ветке "Совсем не понимаю..."

И вот в процессе творческого поиска у меня родилась такая тупая функция.



public DataTable FillXml(string sql, FileStream fs)
{
DataTable dt = null;
int model = 0;
try
{
OracleConnection oraCN = new OracleConnection();
oraCN.ConnectionString = _connectionString;


OracleCommand cmd = new OracleCommand(sql, oraCN);
oraCN.Open();


OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);


using (BinaryWriter bw = new BinaryWriter(fs, Encoding.UTF8))
{
byte[] lead = new byte[3] { 0xEF, 0xBB, 0xBF };
byte[] xml = Encoding.UTF8.GetBytes("");
byte[] ds = Encoding.UTF8.GetBytes("");
byte[] tl = Encoding.UTF8.GetBytes("");


bw.Write(lead);
bw.Write(xml);
bw.Write(ds);


int rowcount = 0;
byte[] buffer = new byte[7000];
while (reader.Read())
{
switch (model)
{
case 0:
string val1 = reader.GetString(0);
bw.Write(val1);
break;


case 1:
string val2 = reader.GetString(0);
byte[] ln = Encoding.UTF8.GetBytes(val2);
bw.Write(ln);
break;


case 2:
long reads = reader.GetBytes(0, 0, buffer, 0, 300);
bw.Write(buffer, 0, (int)reads);
break;
}


++rowcount;
}


bw.Write(tl);
}
}
catch (Exception ex)
{
string msg = ex.Message;
}


return dt;
}


Ожидаемый результат - хмл-файл, ДатаТабле пока не используется. Точнее - ДатаТабле обыгрывается в вызывающем методе. Ну да вопрос не в ней.


Передаваемая Скл-строка - производит таблицу из одного поля в котором записывается хмл-враппированная информация по одной строке в таблице. запись - длинная. Сколько именно - немного зависит от данных, но примерно 8К...


По приведенному коду у меня возникли следующие вопросики:


Метод 0.

Какая информация пишется в выходной файл помимо содержимого поля?

Подсказка - там два байта в одном месте и один байт - в другом.


Метод 1:

Какой объем памяти будет использован?

Единственный работающий метод, но ме-е-едленый... мои 250 Мб качаются 5-6 минут...


Метод 2:

Какой именно каст является недопустимым?


В начале функции написана перекодировка строковых констант в byte[].

Что будет иметь место если не перекодировать?

Напомню - используется BinaryWriter...


Отдельный вопросик:

Почему ФАР корректно определяет кодировку файла если файл записан datatable.WriteXml(stream);

и не определяет ее правильно если файл писан бинаривритером?

Заголовки и содержимое у файлов одинаковые.


#1