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

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

06.04.2020, 22:12. Показов 965. Ответов 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
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
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
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
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
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru