Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 86

Контроль выхода за пределы таблицы Access

02.05.2018, 11:23. Показов 1205. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.Суть проги такова. Из файла бд парсим определенные значения. Но если мы пытаемся спарсить последний элемент+1 тоесть тот который уже не существует выбивает ошибку.Как можно сделать проверку на валидность так сказать.Код прилагаю
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
string path= @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\WhiteChemist - PC\source\repos\Anketa_Client\Anketa_Client\QuestAnswer.accdb";
            object qw = " ";
            OleDbConnection oleDb = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\WhiteChemist-PC\source\repos\Anketa_Client\Anketa_Client\QuestAnswer.accdb");
            OleDbCommand _sqlcomm = new OleDbCommand(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\WhiteChemist-PC\source\repos\Anketa_Client\Anketa_Client\QuestAnswer.accdb");
            oleDb = new OleDbConnection();
            oleDb.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\WhiteChemist-PC\source\repos\Anketa_Client\Anketa_Client\QuestAnswer.accdb";
            try
            {
                oleDb.Open();
                string qqquerry="SELECT COUNT(1) FROM db";
                OleDbCommand comm = new OleDbCommand(qqquerry, oleDb);
                int a = comm.ExecuteNonQuery();
                
                    string ans_query = "SELECT Question FROM db WHERE ID = " + _asd + "";
                    string ques1_query = "SELECT Answer1 FROM db WHERE ID=" + _asd + "";
                    string ques2_query = "SELECT Answer2 FROM db WHERE ID=" + _asd + "";
                    string ques3_query = "SELECT Answer3 FROM db WHERE ID=" + _asd + "";
                    string prov = "";
                    comm = new OleDbCommand(ans_query, oleDb);
                    ask_label.Text = comm.ExecuteScalar().ToString();
 
                    comm = new OleDbCommand(ques1_query, oleDb);
 
                    Question1.Text = comm.ExecuteScalar().ToString();
                    comm = new OleDbCommand(ques2_query, oleDb);
                    Question2.Text = comm.ExecuteScalar().ToString();
                    comm = new OleDbCommand(ques3_query, oleDb);
                    Question3.Text = comm.ExecuteScalar().ToString();
                    string _point = "";
                    if (radioButton1.Enabled == true)
                    {
                        string point_query = "SELECT Point_Answer1 FROM db WHERE ID = " + _asd + "";
                        comm = new OleDbCommand(point_query, oleDb);
                        _point = comm.ExecuteScalar().ToString();
                        point = Convert.ToInt32(_point);
                        MessageBox.Show(point.ToString());
 
                    }
                    else if (radioButton2.Enabled == true)
                    {
                        string point_query = "SELECT Point_Answer2 FROM db WHERE ID = " + _asd + "";
                        comm = new OleDbCommand(point_query, oleDb);
                        _point = comm.ExecuteScalar().ToString();
                        point = Convert.ToInt32(_point);
                        MessageBox.Show(point.ToString());
                    }
                    else if (radioButton3.Enabled == true)
                    {
                        string point_query = "SELECT Point_Answer3 FROM db WHERE ID = " + _asd + "";
                        comm = new OleDbCommand(point_query, oleDb);
                        _point = comm.ExecuteScalar().ToString();
                        point = Convert.ToInt32(_point);
                        MessageBox.Show(point.ToString());
                    }
                    else
                    {
                        MessageBox.Show("Выберите вариант ответа!");
                    }
                    mainpoint += point;
                    _asd++;
 
                    oleDb.Close();
                //asd это внешняя глобальная переменная.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2018, 11:23
Ответы с готовыми решениями:

Программная проверка на предмет выхода за пределы PaperSize в Excel
Доброго времени суток! Подскажите пожалуйста возможно ли программно узнать вышел ли я за пределы листа в excel (скрин ниже). Если такое...

Определение одномерных массивов, контроль выхода за пределы массива
Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным...

Проверка выхода за пределы массива
как сделать проверку на выход за пределы массива?

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,840
Записей в блоге: 1
02.05.2018, 13:27
WhiteChemist, 'это не код, а тихий ужас какой-то. Куча переменных, часть из которых не используется или пересоздается; куча запросов к БД там где достаточно одного; смешивание логики чтения из БД и проверки и наконец привязка логики к первичному ключу. Если не переделывать код, то можно переписать код так:
Кликните здесь для просмотра всего текста
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
using (OleDbConnection oleDb = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\WhiteChemist-PC\source\repos\Anketa_Client\Anketa_Client\QuestAnswer.accdb"))
{
    oleDb.Open();
    
    OleDbCommand comm = new OleDbCommand("SELECT Question, Answer1, Answer2, Answer3, Point_Answer1, Point_Answer2, Point_Answer3 FROM db WHERE ID = " + _asd, oleDb);
    using (OleDbDataReader dataReader = comm.ExecuteReader())
    {
        if (!dataReader.Read())
        {
            // Вопросов больше нет
        }
        else
        {
            ask_label.Text = (string)dataReader["Question"];
            Question1.Text = (string)dataReader["Answer1"];
            Question2.Text = (string)dataReader["Answer2"];
            Question3.Text = (string)dataReader["Answer3"];
            
            if (radioButton1.Enabled)
            {
                point = (int)dataReader["Point_Answer1"];
                MessageBox.Show(point.ToString());
            }
            else if (radioButton2.Enabled)
            {
                point = (int)dataReader["Point_Answer2"];
                MessageBox.Show(point.ToString());
            }
            else if (radioButton3.Enabled)
            {
                point = (int)dataReader["Point_Answer3"];
                MessageBox.Show(point.ToString());
            }
            else
            {
                MessageBox.Show("Выберите вариант ответа!");
            }
            
            mainpoint += point;
            _asd++;
        }
    }
}

Лучше однако изменить логику приложения. Врядли у тебя очень много вопросов и значит их можно прочитать из БД в память за один раз и пользоваться ими.
1
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 86
02.05.2018, 16:51  [ТС]
То что это говно код я знаю. Я пока работаю с так сказать наброском программы, когда завершу работу над основным функционалом буду убирать не нужное.
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
02.05.2018, 23:14
WhiteChemist, если начинать с говнокода - то в итоге какашку и получишь. Начинай с набора классов - вопросы и ответы. Строй логику не в формах, а в классах. Потом, в самом конце, прикрутишь форму для вывода информации. Так меньше говнокода на выходе получишь.
1
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 86
04.05.2018, 21:33  [ТС]
В момент когда доходит до последнего вопроса выпивает ошибку мол DBNULL не возможно к String привести.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,840
Записей в блоге: 1
04.05.2018, 21:39
Лучший ответ Сообщение было отмечено WhiteChemist как решение

Решение

WhiteChemist, это легко исправлетя проверкой для колонок которые допускают NULL значения
C#
1
Question3.Text = dataReader["Answer3"] == DBNull.Value ? "" : (string)dataReader["Answer3"];
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2018, 21:39
Помогаю со студенческими работами здесь

Контроль машин в офисе на предмет выхода в интернет
Доброго всем, существуют ли какие - нибудь способы, алгоритмы, чтобы определить,использовалась ли машина в офисе, входящая в доменную...

Ошибка выхода за пределы границ вектора
как исправить ошибку?

Вложенная коллекция - ошибка выхода за ее пределы
public class Test { private List<List<T>> doubleList; // вложенный список public Test() { ...

Динамические массивы. Последствия выхода за пределы
int main(int argc, char* argv) { int x1=0,x2=0; int num=3; int* p1=new int ; int* p2=new int ; p1=0; p1=1; p1=2; p1=3;

Запрет выхода мыши за пределы формы
Скажити плиииз код чтобы за приделы формы мышки не могла выйти Зарание благодарю!


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru