BLOB данных в простую строку в DataGridView? - PullRequest
2 голосов
/ 22 августа 2009

Я использую C # & MYSQL для разработки настольного приложения.

В одной из моих форм у меня есть DataGridView (dgvBookings), а в таблице базы данных у меня есть таблица tblBookings, которая содержит поле specialization типа BLOB.

Я выбираю данные с помощью следующего запроса,

SELECT * FROM tblBookings WHERE IsActive=1;

и затем связывание данных с DataGridView как,

dgvBookings.DataSource = ds.Tables["allbookings"];

НО после привязки данных в виде сетки отображается значение Byte[] Array для всех строк столбца specialization, имеющее тип BLOB.

Как вы решите эту проблему, я хочу, чтобы данные в формате String, все, что написано в этом столбце, должно отображаться в том виде, в каком оно есть в сетке.

Ответы [ 3 ]

4 голосов
/ 22 августа 2009

Перед использованием DataSet вам придется преобразовать байтовый массив в строку:


DataTable allBookings = ds.Tables["allbookings"];
DataColumn column = allBookings.Columns.Add("NotABlobAnyMore", typeof(string));

foreach (DataRow row in allBookings.Rows) {
    row[column] = Encoding.Unicode.GetString((byte[])row["specialization"]);
}

dgvBookings.DataSource = allBookings ;

В примере я использую Unicode, но вы должны использовать любую кодировку, использованную для генерации массива байтов (blob).

Если вы хотите разрешить обновления для нового столбца, вам придется преобразовать строку обратно в массив байтов (в старом столбце) перед отправкой данных обратно в базу данных.

1 голос
/ 22 августа 2009

Ну, врожденная проблема с BLOB - это то, что это ... не текст. Это двоичный файл. Это может быть изображение (jpg и т. Д.), Исполняемый файл или текст ... но в какой кодировке? UTF8? Не просто. Если бы это был CLOB, я бы надеялся, что он работает нормально, но в противном случае я бы полностью ожидал, что вам придется анализировать BLOB вручную, иначе как он будет интерпретироваться?

Для произвольного BLOB самым близким, что я могу придумать, является просто показать что-то вроде гексагона ... но с DataTable даже это вызов. Вы можете сделать это для класса через TypeConverter ...

1 голос
/ 22 августа 2009

Передайте событие CellFormatting и приведите байтовый массив к String или приведите BLOB к символьному типу в вашем запросе SQL.

...