С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
 Аватар для Chewbacca1
4 / 4 / 2
Регистрация: 14.02.2015
Сообщений: 122
SQLite

Заданное приведение не является допустимым

21.02.2015, 16:54. Показов 6088. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу найти ошибку, помогите пожалуйста(
Собственно, есть есть база с двумя таблицами (users(id,username,password,sgroup) и progress(id,points,test1,test2))
После сдачи теста фиксируется true или false (в test1,test2).
После перехода на форму статистики вылазит данная ошибка, почему понять не могу

Вот код формы:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
public partial class Form6_statistics : Form
    {
        string dbConnectionString = @"Data Source = base.db; Version = 3";
 
        public Form6_statistics()
        {
            InitializeComponent();
        }
 
        // Заполнить сведениями о прохождении тестов
        private void FillTestingInfo()
        {
            SQLiteConnection sqliteCon = new SQLiteConnection(dbConnectionString);
 
            try
            {
                sqliteCon.Open();
                string query = "select * from progress where id='" + Form1.GetUserId() + "'";
                SQLiteCommand createCommand = new SQLiteCommand(query, sqliteCon);
                //createCommand.ExecuteNonQuery();
                SQLiteDataReader dr = createCommand.ExecuteReader();
 
                while (dr.Read())
                {
                    bool test1 = dr.GetBoolean(2);
                    bool test2 = dr.GetBoolean(3);
 
                    label3_test1.Text = "1 - " + IsPassed(test1);
                    label4_test2.Text = "2 - " + IsPassed(test2);
 
                }
                sqliteCon.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        // Вернуть текст прохождения
        private string IsPassed(bool test)
        {
            if (test)
                return "Пройден";
            else
                return "Не пройден";
        }
 
        // Проверить, есть ли в таблице запись, с таким id, вернуть его (или 0 если нет)
        private int Cheking()
        {
            int id = 0;
            SQLiteConnection sqliteCon = new SQLiteConnection(dbConnectionString);
 
            try
            {
                sqliteCon.Open();
                string query = "select * from progress where id='" + Form1.GetUserId() + "'";
                SQLiteCommand createCommand = new SQLiteCommand(query, sqliteCon);
                SQLiteDataReader dr = createCommand.ExecuteReader();
 
                while (dr.Read())
                {
                    id = dr.GetInt32(0);
                }
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            textBox1.Text = id.ToString();
            return id;
        }
 
        // Вставить в таблицу соответствующий id
        private void InsertId()
        {
            SQLiteConnection sqliteCon = new SQLiteConnection(dbConnectionString);
 
            try
            {
                sqliteCon.Open();
                string query = "insert into progress (id) values ('" + Form1.GetUserId()+"')";
                SQLiteCommand createCommand = new SQLiteCommand(query, sqliteCon);
                createCommand.ExecuteNonQuery();
                sqliteCon.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void Form6_statistics_Load(object sender, EventArgs e)
        {
            if (Cheking() == 0)
               InsertId();
            FillTestingInfo();
        }
    }

Хочу заметить что данной ошибки не возникает у admin и qwert
Сильно не ругайте, я еще новичок)
Миниатюры
Заданное приведение не является допустимым   Заданное приведение не является допустимым   Заданное приведение не является допустимым  

Изображения
   
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2015, 16:54
Ответы с готовыми решениями:

Заданное приведение является недопустимым
Visual studio пишет что данное приведение является недопустимым в чем ошибка? int Number_order = datareader_main.GetInt32(1); ...

Ошибка при создании ответов. Заданное приведение является недопустимым
Здравствуйте, подскажите, появляется такая ошибка:Заданное приведение является недопустимым. в строке a.setRight((bool)answersTable.Rows); ...

System.InvalidCastException: "Заданное приведение является недопустимым."
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...

11
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
21.02.2015, 17:50
Лучший ответ Сообщение было отмечено Chewbacca1 как решение

Решение

Chewbacca1, Сделайте выборку из таблицы Progress через обычный SELECT, вместо того, чтобы показывать данные из интерфейса. У вас поля test1 и test2 могут содержать значения NULL, и из интерфейса не ясно, NULL там или false ...
1
 Аватар для Chewbacca1
4 / 4 / 2
Регистрация: 14.02.2015
Сообщений: 122
22.02.2015, 13:09  [ТС]
kodv, там false по default'у в test1,test2; но на всякий поставил not null;
Как это через обычный select, у меня он не обычный?)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
22.02.2015, 13:58
Chewbacca1, NOT NULL эту неоднозначность устраняет. Пройдитесь по коду в режиме пошаговой отладки и посмотрите, в какой строке возникает исключение. Так станет яснее, в чем проблема.
1
 Аватар для Chewbacca1
4 / 4 / 2
Регистрация: 14.02.2015
Сообщений: 122
22.02.2015, 15:08  [ТС]
kodv, Возникает в методе private void FillTestingInfo()
Пока причину найти не могу)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
22.02.2015, 15:27
Chewbacca1, если честно, то я ожидал, что вы локализуете ошибку до строки. Ну да ладно. Если в test1 и test2 точно логические значения, то ошибка в методе Form1.GetUserId(), код которого у вас не приведен.
1
 Аватар для Chewbacca1
4 / 4 / 2
Регистрация: 14.02.2015
Сообщений: 122
22.02.2015, 16:41  [ТС]
Очень странно, поменял булевый тип на строковый в методе где экзепшн и все норм
Или я чего-то не знаю?)
C#
1
2
string test1 = dr.GetString(2);
string test2 = dr.GetString(3);
Добавлено через 1 час 13 минут
kodv, Что скажете по этому поводу?)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
22.02.2015, 17:30
Chewbacca1, я не знаю ответ на этот вопрос. Могу только предполагать, что, допустим, провайдер не может корректно преобразовать тип BOOLEAN в базе данных в тип bool в .NET. Попробуйте посмотреть тип значения этих столбцов одним из следующих способов:
C#
1
2
3
4
5
MessageBox.Show(dr.GetDataTypeName(2));
// ИЛИ
MessageBox.Show(dr.GetFieldType(2).ToString());
// ИЛИ
MessageBox.Show(dr.GetValue(2).GetType().ToString());
0
 Аватар для Chewbacca1
4 / 4 / 2
Регистрация: 14.02.2015
Сообщений: 122
22.02.2015, 18:18  [ТС]
kodv, BOOLEAN выходит, в любом случае спасибо)
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 2
17.11.2015, 08:53
Аналогичная проблема ODBC и Postgres SQL

Поле в базе
SQL
1
expr BOOLEAN NOT NULL DEFAULT FALSE
Код на C#
C#
1
2
3
4
5
  
if (!reader.IsDBNull(1))
{
    bool expr = reader.GetBoolean(1);
}
Смотрел что там в риадере, там или "0" или "1". Флаг в драйвере bools as char стоит.

Есть идеи?

В некоторых случаях он это хавает, в некоторых нет. Порой помогает поменять порядок доступа к полям чтобы конвертирование заработало.

Добавлено через 1 час 51 минуту
P. S. В общем пришёл к тому что если не делать if, то всё работает, а внутри if не может преобразовать тип. Оказывается я не первый и в интернете уже были такие вопросы. Только ответов так и нет.
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
17.11.2015, 14:52
Цитата Сообщение от Chewbacca1 Посмотреть сообщение
Очень странно, поменял булевый тип на строковый в методе где экзепшн и все норм
Или я чего-то не знаю?)
SQLite разве поддерживает bool тип данных?

Кликните здесь для просмотра всего текста
1.1 Boolean Datatype

SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).
1
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 2
18.11.2015, 02:26
В SQLite это да. А вот что с Postgres?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2015, 02:26
Помогаю со студенческими работами здесь

Извлечь данные из ячейки таблицы: "заданное приведение является недопустимым"
Ребят помогите решить ошибку, необходимо извлечь данные из ячейки таблицы- при компиляции выдается ошибка : заданное приведение является...

Ошибка в потоке "Заданное приведение является недопустимым"
Здравствуйте! Написал программу, которая использует многопоточность. Так как с одним потоком программа жутко зависает. Но возникает ошибка...

Как проверить, допустимым ли является символ на соответствие части регулярного выражения?
У меня есть регулярное выражение. Как проверить строку на соответствие регулярному выражению понятно, а как проверить, допустимым ли...

Заданное приведение является недопустимым
Добрый вечер возникла такая проблема "Заданное приведение является недопустимым" в этом месте return (long)spentTime; spentTime...

Заданное приведение является недопустимым
Всем привет. есть функция public T GetObject<T>(string key1, string key2) { T result = default(T); ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru