2013-10-03 4 views
0

У меня есть сериализованный класс с переменной 7, которые записываются в поток памяти и затем вставляются в поле базы данных. Переменная 7 - это все четыре байта, и перед записью в базу данных могут быть сотни записей. Это работает успешно.Чтение потока памяти

Однако, когда я получаю данные обратно из базы данных и десериализации его:

rdr = cmd.ExecuteReader 
    While rdr.Read() 
     arr = rdr("BINPROFILE") 
     ms.Write(arr, 0, arr.Length) 
     ms.Position = 0 
     SER = bf.Deserialize(ms) 
    End While 

Моего переменного «SER», который реализация класса, содержащего 7 переменных, только считывает первые 7 переменных.

Как пропустить весь поток данных и прочитать все данные, которые он содержит?

+0

Вы хотите прочитать поток в byte(), string? –

+0

Вам нужно будет повторно вызвать Deserialize(), чтобы получить другие. Не хранить * один * объект в строке таблицы в dbase, в общем случае, является ошибкой. –

ответ

0

SER перезаписывается на каждой итерации цикла, оставляя вам только значение из последней записи. Вам нужно сохранить их в массиве или списке или работать с ним в цикле.

SER = bf.Deserialize(ms) 

Эта строка заменит все, что было в переменной SER, с новым значением, в вашем случае, 7 переменными.

+0

Я подозревал, что мне нужно вызвать Deserialize() для каждого 28-байтового блока данных, однако, если я переместю ms.Position на 28 байт, я получаю сообщение об ошибке «Входной поток не является допустимым двоичным форматом». Я не могу найти примеров того, как вы выполняете циклические сериализованные данные, но я три раза копировал строку 'SER = bf.Deserialize (ms)' и, конечно же, он извлекал каждую группу данных. Я согласен с Хансом, я, вероятно, не должен строго хранить данные, подобные этому, но характер данных и то, как он вписывается в содержимое таблицы –

Смежные вопросы