Как вы, наверное, знаете, это очень плохое кодирование на конце VB6. То, что он пытается сделать - это привести данные Single - которые совпадают с плавающей точкой в C # - как String. Но хотя есть и лучшие способы сделать это, начать с действительно плохой идеи.
Основная причина заключается в том, что чтение двоичных данных в BSTR VB6 преобразует данные из 8-битных байтов в 16-битные символы, используя текущую кодовую страницу. Таким образом, это может привести к различным результатам в БД в зависимости от того, в какой локали она работает. (!)
Поэтому, когда вы читаете его обратно из БД, если вы не укажете ту же кодовую страницу, которая использовалась при записи, вы получите разные значения с плавающей точкой, возможно, даже недопустимые.
Было бы полезно увидеть примеры данных как в двоичном (одиночном), так и в DB (строковом) виде, в шестнадцатеричном виде, чтобы убедиться, что это то, что происходит.
Из более позднего поста:
На самом деле это не "плохой" код VB6.
Это потому, что он переносит двоичные данные в строковую область, что нарушает основное правило современного кодирования VB. Вот почему существует тип данных Byte. Если вы проигнорируете это, вы можете получить неразборчивые данные, когда создаваемая БД пересекает границы локали.
Что он делает, так это хранит массив
в компактном двоичном формате и сохранение
это как «кусок» в базу данных.
Есть много веских причин, чтобы сделать
это.
Конечно, у него есть веская причина для этого (хотя ваше определение «компактный» отличается от обычного). Концы хороши: средства не выбраны.
К ОП:
Вы, вероятно, не можете изменить то, что вам дают в качестве входных данных, поэтому вышеизложенное в основном носит академический характер. Если у вас еще есть время изменить метод, используемый для создания больших двоичных объектов, давайте предложим методы, в которых не используются строки.
Применяя любое предоставленное решение, старайтесь избегать строк и, если не можете, декодируйте их, используя конкретную кодовую страницу, соответствующую той, которая их создала.