gpt4 book ai didi

c# - 将 DataTable 中的列值从 byte[] 转换为 String

转载 作者:行者123 更新时间:2023-12-04 18:11:21 24 4
gpt4 key购买 nike

总之,我有一个 SQL 解析器和编辑器,我打算将其集成到我的应用程序中。当我运行以下查询时

select * from sys.sysprocesses;

返回的列之一是 byte[] 的类型.这个专栏很高兴被放入 DataTable ,但是,当我这样做时
bindingSource.DataSource = result.DataTable;

并尝试在 DataGridView 中显示数据我得到了明显的 ArgumentException .在这个位置,改变 byte[] 的最好方法是什么?到 stringDataTable 中显示?

我可以遍历 DataTable做一些事情,比如
foreach(DataColumn col in dataTable.Columns)
if (col.DataType == typeof(byte[]))
foreach (DataRow row in dataTable.Rows)
row[col] = Encoding.ASCII.GetString((byte[])row[col]);

但这将尝试放置 string变成 byte[]列,将不起作用。我可以克隆 DataTable然后改变类型,
DataTable dtCloned = dataTable.Clone();
dtCloned.Columns[0].DataType = typeof(String);
foreach (DataRow row in dataTable.Rows)
dtCloned.ImportRow(row);

但我需要一个转换步骤来转换 byte[]成一个十六进制字符串。实现我想要的最好和最好最有效的方法是什么?

谢谢你的时间。

最佳答案

这就是我最终做到这一点的方式。

public static void PostProcessData(ref DataTable dataTable)
{
// Convert byte[] columns.
List<DataColumn> colCollRem = new List<DataColumn>();
List<DataColumn> colCollAdd = new List<DataColumn>();
foreach(DataColumn col in dataTable.Columns)
if (col.DataType == typeof(byte[]))
colCollRem.Add(col);

// Remove old add new.
foreach (DataColumn col in colCollRem)
{
int tmpOrd = col.Ordinal;
string colName = String.Format("{0}(Hex)", col.ColumnName);
DataColumn tmpCol = new DataColumn(colName, typeof(String));
dataTable.Columns.Add(tmpCol);
colCollAdd.Add(tmpCol);
foreach (DataRow row in dataTable.Rows)
row[tmpCol] = Utilities.ByteArrayToHexString((byte[])row[col]);
dataTable.Columns.Remove(col);
string colNameNew = colName.Replace("(Hex)", String.Empty);
dataTable.Columns[colName].ColumnName = colNameNew;
dataTable.Columns[colNameNew].SetOrdinal(tmpOrd);
}
}

使用此转换
public static string ByteArrayToHexString(byte[] p)
{
byte b;
char[] c = new char[p.Length * 2 + 2];
c[0] = '0'; c[1] = 'x';
for (int y = 0, x = 2; y < p.Length; ++y, ++x)
{
b = ((byte)(p[y] >> 4));
c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
b = ((byte)(p[y] & 0xF));
c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
}
return new string(c);
}

我希望这对其他人有帮助。

关于c# - 将 DataTable 中的列值从 byte[] 转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com