Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
SQLite

Не получается распарсить данные считанные из таблицы SQLite3

06.04.2020, 22:12. Показов 909. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!


Есть таблица SQLite3:

SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE `profiles` (
    `uid`   INTEGER NOT NULL UNIQUE,
    `posx`  INTEGER,
    `posy`  INTEGER,
    `posz`  INTEGER,
    `angley`    INTEGER,
    `health`    INTEGER,
    PRIMARY KEY(`uid`)
);
Не знаю почему все поля INTEGER, но например я записываю angley как float, и в базе данных содержится 307.96875.

C#
1
2
3
4
5
SQLiteCommand command = new SQLiteCommand(commandText, connect);
--
command.Parameters.AddWithValue("@angley", AngleY);
command.Parameters.AddWithValue("@health", Health);
--
Записываются данные нормально. Смотрел через SQLiteDatabaseBrowser. Считываются тоже. Но затем не могу привести их к нужному типу.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using (SQLiteConnection connect = new SQLiteConnection($"Data Source={_filePath}; Version=3;"))
{
    string commandText = $"SELECT * FROM `profiles` WHERE uid = @uid";
 
    SQLiteCommand command = new SQLiteCommand(commandText, connect);
    command.Parameters.AddWithValue("@uid", UID);
 
    connect.Open();
    SQLiteDataReader reader = command.ExecuteReader();
 
    foreach (DbDataRecord record in reader)
    {
        long uid = record["uid"];
 
        short posX = record["posx"];
        short posY = record["posy"];
        short posZ = record["posz"];
 
        float angleY = record["angley"];
 
        int health = record["health"];
    }
 
    connect.Close();
}
Ошибки вот тут:

C#
1
2
3
4
5
6
7
8
9
long uid = record["uid"];
 
short posX = record["posx"];
short posY = record["posy"];
short posZ = record["posz"];
 
float angleY = record["angley"];
 
int health = record["health"];
Неужели все поля надо считывать как String и потом и парсить? Это же шляпа если так.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2020, 22:12
Ответы с готовыми решениями:

Не получается считать данные с база данных db (библиотека SQLite3)
Cделал программу по исходникам из курсовой работы, формы запускают, но почему-то не все формы подключаются к базе, а последнее время вообще...

Не копируются данные считанные из файла в структуру
есть структура struct SomeBitGroup{ unsigned char scale, r_m, mod, kop; unsigned short cond; }sbg; //необходимо заполнить...

Разбить считанные данные в dataGridView на несколько таблиц
Доброго времени соток! Прошу помочь с одной задачей. Есть одни текстовый файл в котором сохранена несколько справочников нужно...

9
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
06.04.2020, 23:16
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
Неужели все поля надо считывать как String и потом и парсить? Это же шляпа если так.
а вы не используйте индексатор который object возвращает а используйте специальные методы по типу GetInt32

C#
1
int health = record.GetInt32(record.GetOrdinal("health"));
0
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,983
07.04.2020, 04:39
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
Неужели все поля надо считывать как String и потом и парсить? Это же шляпа если так.
Вы можете под отладкой посмотреть какой на самом деле тип данных возвращется и выполнить приведение. Или использовать вариант предложенный выше.
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
07.04.2020, 08:21  [ТС]
Цитата Сообщение от FateOri Посмотреть сообщение
а вы не используйте индексатор который object возвращает а используйте специальные методы по типу GetInt32

C#
1
int health = record.GetInt32(record.GetOrdinal("health"));
System.InvalidCastException: 'Заданное приведение является недопустимым.'
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
07.04.2020, 10:08
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
System.InvalidCastException: 'Заданное приведение является недопустимым.'
покажите скрин отладчика чтобы я видел значение переменной из БД
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
07.04.2020, 10:58  [ТС]
Цитата Сообщение от FateOri Посмотреть сообщение
покажите скрин отладчика чтобы я видел значение переменной из БД
0
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,983
07.04.2020, 11:30
Sergio-X86, значения в ридере покажите, а не тело исключения)
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
07.04.2020, 12:48
Sergio-X86, если в таблице есть null значения,надо делать проверку.
https://stackoverflow.com/ques... umn-values
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
07.04.2020, 20:25  [ТС]
Собрал тестовый проект. Добавил в приложении.
Только нужно докачать NuGet пакет System.Data.SQLite.

Просьба посмотреть правильно ли я вообще создаю таблицу, записываю, и считываю данные (как понятно из темы они не считываются). Ну и собственно как правильно считать данные?


Есть еще немного вопросов:

1) При создании таблицы через SQLiteBrowser для short, byte - создается поле типа INTEGER, и все занимает при этом 4 байта хотя нужно меньше. Указал в коде в комментариях сколько желательно для каждого поля. И еще для float изначально вообще предлагается 8 байт поле, а достаточно 4. Можете помочь сформировать правильный запрос формирования таблицы в зависимости от типа данных?

2) Достаточно ли using в коде?

3) Нужно ли использовать try для проверки удачного выполнения запроса?


P.S. Работаю с MySQL в PHP, там все проще намного и понятнее. Тут не могу разобраться, первый раз юзаю SQLite.


Заранее спасибо
Вложения
Тип файла: rar SQLite3.rar (3.14 Мб, 0 просмотров)
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
08.04.2020, 19:36  [ТС]
Цитата Сообщение от FateOri Посмотреть сообщение
покажите скрин отладчика чтобы я видел значение переменной из БД
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2020, 19:36
Помогаю со студенческими работами здесь

Как сохранить данные, считанные из файла конфигурации, в словарь C#?
Консольное приложение. Есть файл конфигурации <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> ...

Отразить данные считанные из текстового документа на графике функции
Здравствуйте. Вообще не шарю :cry: Существует некая программа,которая выводит в консоль значения,записанные в текстовом документе. ...

Не получается обновлять данные таблицы
Доброе утро! очень нужна ваша помощь 1. У школьника в подотчетной форме д.б. таблица всех мероприятий, которые он может выбрать 2....

Не получается получить данные из таблицы
Посылаю запрос SELECT `Key` FROM `players` WHERE `Name` = 'Takeshi_Kitano' в ответ приходит либо просто буква "я" либо...

Не получается ввести данные в таблицы
Добрый день. У меня такой вопрос: можно ли на основание запроса на выборку вводить данные в несколько таблиц, которые связаны между собой...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru