Согласно источнику , благодаря Дэвиду Брауну, datatable не может обрабатывать двоичные данные с помощью функции выбора, он не реализован:
internal enum ValueType {
Unknown = -1,
Null = 0,
Bool = 1,
Numeric = 2,
Str = 3,
Float = 4,
Decimal = 5,
Object = 6,
Date = 7,
}
Единственные решения - преобразовать varbinay вvarchar в запросе к серверу, если вы знаете, что это за столбцы, или конвертируете датируемые столбцы byte [] в строковые столбцы в дублирующейся таблице и, чем сделать select (), конечно, другие компоненты, такие как linq, делают это намного проще ...
Обновление:
пример кода, как добавить новые строковые столбцы в таблицу и преобразовать byte[]
в string
:
private DataTable fixDatatableType(DataTable input) {
List<DataColumn> overwriteColumnIndex = new List<DataColumn>();
List<string> addedColumns = new List<string>();
for (int i = 0; i < input.Columns.Count; i++)
{
if (input.Columns[i].DataType == typeof(byte[])) {
overwriteColumnIndex.Add(input.Columns[i]);
string newColumnName = input.Columns[i].ColumnName + "_str";
addedColumns.Add(newColumnName);
DataColumn dataColumn = new DataColumn(newColumnName, typeof(string));
input.Columns.Add(dataColumn);
}
}
if (overwriteColumnIndex.Count != 0) {
for (int z = 0; z < input.Rows.Count; z++)
{
DataRow row = input.Rows[z];
for (int m = 0; m < overwriteColumnIndex.Count; m++)
{
if (row[overwriteColumnIndex[m]] != DBNull.Value) {
row[addedColumns[m]] =
ByteArrayToHexString((byte[])row[overwriteColumnIndex[m]]);
}
}
}
}
return input;
}