2

我正在使用 C# 和 MYSQL 开发桌面应用程序。

在我的一个表单中,我有一个DataGridView(dgvBookings),在我的数据库表中,我有一个包含specializationtype 字段的表 tblBookings BLOB

我正在使用以下查询选择数据,

SELECT * FROM tblBookings WHERE IsActive=1;

然后将数据与 DataGridView 绑定为,

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

但是在 gridview 中绑定数据后,它显示Byte[] Array了所有列specialization的 BLOB 类型行的值。

你如何解决这个问题,我想要字符串格式的数据,该列中写入的任何内容都应该显示在网格中。

4

3 回答 3

4

在使用 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) 的任何编码。

如果要允许更新新列,则必须在将数据发送回数据库之前将字符串转换回字节数组(在旧列中)。

于 2009-08-22T19:51:16.937 回答
1

接收CellFormatting事件并将字节数组转换为 a String,或将 BLOB 转换为 SQL 查询中的字符类型。

于 2009-08-22T18:27:18.120 回答
1

嗯,BLOB 的固有问题是它……不是文本。它是二进制的。它可以是图像(jpg 等)、exe 文件,也可以是文本……但是采用哪种编码方式?UTF8?不简单。如果它是一个 CLOB,我希望它可以正常工作 - 但否则我会完全预料到您必须手动解析 BLOB,否则它将如何解释?

For an arbitrary BLOB, the closest I can think of is to just show something like the hex... but with DataTable even that is a challenge. You could do it for a class via a TypeConverter...

于 2009-08-22T19:51:28.107 回答