C# 解决Mysql数据库二进制数据读取问题

在Winform中使用DataGridView来显示表格数据的时候,如果遇到二进制数据类型会默认按照Bitmap来解析,如果数据不是bitmap格式,解析会出现异常,导致程序出错,表格无法正常显示。

解决方法参照: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>
/// 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏