C# 解决Mysql数据库二进制数据读取问题
在Winform中使用DataGridView来显示表格数据的时候,如果遇到二进制数据类型会默认按照Bitmap来解析,如果数据不是bitmap格式,解析会出现异常,导致程序出错,表格无法正常显示。
下面给出实现:
/// <summary>
/// solve the banary data problem.
/// https://stackoverflow.com/questions/1869853/overcoming-net-problem-of-displaying-binary-columns-in-a-datagridview?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
/// </summary>
/// <param name="table"></param>
private void MorphBinaryColumns(DataTable table)
{
var targetNames = table.Columns.Cast<DataColumn>()
.Where(col => col.DataType.Equals(typeof(byte[])))
.Select(col => col.ColumnName).ToList();
foreach (string colName in targetNames)
{
// add new column and put it where the old column was
var tmpName = "new";
table.Columns.Add(new DataColumn(tmpName, typeof(string)));
table.Columns[tmpName].SetOrdinal(table.Columns[colName].Ordinal);
// fill in values in new column for every row
foreach (DataRow row in table.Rows)
{
var bytes = ((byte[])row[colName]);
// var data = "0x" + string.Join("", ((byte[])row[colName]).Select(b => b.ToString("X2")).ToArray());
row[tmpName] = "(BLOB DATA) " + bytes.Length + " bytes";
}
// cleanup
table.Columns.Remove(colName);
table.Columns[tmpName].ReadOnly = true;
table.Columns[tmpName].ColumnName = colName;
}
}
在读取数据的操作时:
MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn);
adapter.SelectCommand.Parameters.AddRange(paramLists);
DataSet ds = new DataSet();
adapter.Fill(ds);
// 在绑定之前先转换一下table
MorphBinaryColumns(ds.Tables[0]);
dataGridView1.DataSource = ds.Tables[0];
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: C# 解决Mysql数据库二进制数据读取问题
文章字数: 291
本文作者: Jun
发布时间: 2018-06-29, 15:42:00
最后更新: 2018-06-29, 16:11:47
原始链接: http://yoursite.com/2018/06/29/C-解决Mysql数据库二进制数据读取问题/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。