Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
1

Получение данных из БД формата byte и форматирование в string

30.09.2018, 12:10. Показов 5123. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Получаю через reader данные из sql базы. Они в формате byte (varbinary).

Как переформатировать их в string, для записи в строку.

Я делаю таким образом, но выпадет ошибка, что нельзя преобразовать System.Byte[] в System.String

C#
1
2
byte[] bytes = Encoding.ASCII.GetBytes((string)reader["_Table2"]);
string complete = System.Text.Encoding.UTF8.GetString(bytes);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2018, 12:10
Ответы с готовыми решениями:

перевод формата string to byte
Здравствуйте. Имеется TextBox на форме, TextBox.Text.Lenght=3считываются три(две или одна) цифры....

Что-то не так с Encoding данных туда и обратно: byte в string и обратно в byte
Добрый день, коллеги! Столкнулся с такой проблемой, причём заметил её не сразу ("вроде бы всё...

Прием данных Winsock и преобразование данных Byte в String
VB.NET Здравствуйте! Вопрос! Есть обьект winsock для обмена сообщениями tcp\ip....

convert string of byte 2 byte array
Есть длиииный стринг '00 05 0F 7B' и тд и тп, нада все это дело запихать в байтный массив (чтобы...

16
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
30.09.2018, 12:15 2
imcavs™, если вы получаете на руки массив байт, то на кой ляд нужно его перегонять в строку, из которой снова получать массив байт, из которого снова получать строку? Это под действием веществ писалось?
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
30.09.2018, 12:20 3
C#
1
byte[] bytes = (byte[])reader["_Table2"];
?
0
Usaga
30.09.2018, 12:21
  #4

Не по теме:

Кстати, название поля таблицы тоже классное... _Table2

0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
30.09.2018, 12:35  [ТС] 5
Разве есть возможность сразу вывести в listview байт, не переделав его в string?
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
30.09.2018, 12:58 6
imcavs™, для вывода в listView байты безусловно нужно так или иначе превратить в строку. Если это байты строки в известной кодировке, то преобразование делается через класс Encoding. Тут сразу возникает вопрос зачем строка хранится как varbinary вместо varchar (или аналогичного)
C#
1
2
byte[] bytes = (byte[])reader["_Table2"];
string complete = System.Text.Encoding.UTF8.GetString(bytes);
Если байты это просто байты, то можно попытаться использовать вариант выше. Не стоит только рассчитывать на какой-то осмысленный результат. Также можно вывести в виде hex-строки
C#
1
2
byte[] bytes = (byte[])reader["_Table2"];
string complete = BitConverter.ToString(bytes);
0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
30.09.2018, 14:54  [ТС] 7
OwenGlendower, а как потом из строки в байт перевести без повреждений?
У меня есть в таблице данные в байтах вида: 12x1as12oDe. Как их правильно засунуть в string, перенести на другую форму, а там из string снова в byte?

Перенести как знаю, через отдельный класс. Нужна правильность переформатирования туда и обратно.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
30.09.2018, 15:49 8
Цитата Сообщение от imcavs™ Посмотреть сообщение
У меня есть в таблице данные в байтах вида: 12x1as12oDe.
Странные байты. Где ты их в таком виде видишь? Скрншот можешь сделать?
0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
06.10.2018, 18:18  [ТС] 9
OwenGlendower, Там всё сложнее. Это строка из 1С ключевой параметр _IDRRef.
Миниатюры
Получение данных из БД формата byte и форматирование в string  
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
06.10.2018, 18:23 10
imcavs™, это обычное байтовое значение. Прочитай его как byte[] и передавай в таком же виде.
0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
06.10.2018, 19:34  [ТС] 11
OwenGlendower, Хорошо, прочитаю как byte[]. Далее мне нужно этот byte[] вставить в sql запрос для выборки. Такое возможно, без преобразования в string ?
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
06.10.2018, 19:40 12
imcavs™, по идее да. Обычный параметризованный запрос должен отработать.
0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
06.10.2018, 19:46  [ТС] 13
OwenGlendower, вот пример.

C#
1
2
3
4
5
6
7
8
//Заношу в класс байты:
Class.ID = (byte[])reader["_IDRRef"];
 
//Далее перехожу на другую форму. Там конвертирую байты в string командой: 
string allData = System.Text.Encoding.GetEncoding(1252).GetString(Class.ID);
 
//И делаю выборку: 
string query = "SELECT *  from _Table where _IDRRef = " + allData + "";
Результат: Неправильный синтаксис около конструкции "˜". Либо просто не выводит корректно в string.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
06.10.2018, 20:01 14
Лучший ответ Сообщение было отмечено imcavs™ как решение

Решение

imcavs™, только что решили что преобразование в строку не нужно, а ты снова за свое. Попробуй использовать байты в запросе. Примерно так:
C#
1
2
3
4
string query = "SELECT *  from _Table where _IDRRef = @IDRRef";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@IDRRef", Class1.sKey);
command.ExeuteReader();
0
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 432
06.10.2018, 20:07  [ТС] 15
OwenGlendower, уже решил свой вопрос. Преобразование в string всё-таки завершено. Вот этим запросом успешно конвертирует, только без 0x первых двух символов. Не подскажешь, как их дописать перед кодом?
C#
1
  String.Concat(Array.ConvertAll((byte[])reader["_IDRRef"], x => x.ToString("X2")));
Добавлено через 2 минуты
OwenGlendower,
C#
1
String.Concat ("0x") + //решил мой вопрос
Благодарность OwenGlendower за помощь.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
06.10.2018, 20:13 16
Цитата Сообщение от imcavs™ Посмотреть сообщение
String.Concat ("0x") + //решил мой вопрос
String.Concat не нужен. Можно просто "0x" +
1
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
07.10.2018, 12:19 17
Цитата Сообщение от imcavs™ Посмотреть сообщение
Преобразование в string всё-таки завершено.
Максимально кривое решение по эффективности.
0
07.10.2018, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2018, 12:19
Помогаю со студенческими работами здесь

padright(c:string; ch: char; n:byte):string - функция выравнивает строку С по размеру N
функция выравнивает строку С по размеру N. если длина строкиС меньше N, то она дополняется справа...

функция choose(n:byte; c1: string): string возвращает значение из списка
функция choose(n:byte; c1: string): string возвращает значение из списка, выбранное на основании...

Преобразование string в word и string в byte
Как преобразовать string в byte в этой строчке: dolgn.prof.stag:=Edit5.Text; //dolgn.prof.stag -...

Перевод Dictionary<string, string> в byte[]
Вопрос: как мне конвертировать Dictionary&lt;string, string&gt;, с произвольными значениями и именами в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru