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

В позиции 0 строка отсутствует

19.04.2021, 19:18. Показов 10747. Ответов 26

Студворк — интернет-сервис помощи студентам
Пишу код и нужно извлечь значение поля из mssql, но выдаёт ошибку: System.IndexOutOfRangeException: "В позиции 0 строка отсутствует."
По тому же принципу код на другой форме работает(второй скрин)
Подскажите, пожалуйста, в чём проблема. Заранее спасибо

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
private void button1_Click(object sender, EventArgs e)
        {           
            if (Regex.IsMatch(textBox1.Text, "^[^x]+$")&& Regex.IsMatch(textBox2.Text, "^[^x]+$")&& Regex.IsMatch(textBox3.Text, "^[^x]+$"))
            {
                using (SqlConnection con = new SqlConnection(@"Data Source=WIN-M8N2BS22PV1\SQLEXPRESS;Initial Catalog=Квалификация;Integrated Security=True"))
                {
                    using (SqlCommand cmd = new SqlCommand($"Select * from Регистрация where Логин= '{ Вход.login }' and Пароль= '{Вход.pass}' ", con))
                    {
                      
                        cmd.CommandType = CommandType.Text;
                        using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                        {
                            using (DataTable dt = new DataTable())
                                
                            {
                                cmd.CommandType = CommandType.Text;
                                sda.Fill(dt);
 
                                if (textBox2.Text == textBox3.Text)
                                {
                                    // тут
                                    string pas = dt.Rows[0]["Пароль"].ToString();
                                    while (pas.Contains(" "))
                                        pas = pas.Replace(" ", "");
                                    if (pas == textBox1.Text)
                                    {
                                        using (SqlCommand cmd1 = new SqlCommand($"update Регистрация set Пароль ='{textBox2.Text}' where Логин= '{ Вход.login }' and Пароль= '{Вход.pass}'", con))
                                        {
                                            using (SqlDataAdapter sda1 = new SqlDataAdapter(cmd1))
                                            {
                                                using (DataTable dt1 = new DataTable())
                                                {
                                                    cmd.CommandType = CommandType.Text;
                                                    sda1.Fill(dt1);
                                                }
                                            }
                                        }
                                    }
                                    else
                                        MessageBox.Show("Старый пароль не совпадает с паролем в базе данных", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                                else
                                    label5.Visible = true;
                            }
                        }
                    }
                }
            }
            else
                MessageBox.Show("Заполните все поля", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
Миниатюры
В позиции 0 строка отсутствует   В позиции 0 строка отсутствует  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2021, 19:18
Ответы с готовыми решениями:

В позиции 1 строка отсутствует
Здравтвуйте у меня есть табличка DGV которую я заполняю данными из DT и есть одно полу куда ставится отметка, при установке отметки в БД...

Ошибка "В позиции -1 строка отсутствует."
При выборе из выпадающего списка любого значения получаю ошибку: System.IndexOutOfRangeException: "В позиции -1 строка...

В позиции "№" строка отсутствует
Добавил в свое приложение локальную БД. Загрузил таблицу в источник данных. При попытке отобразить значение некой ячейки выбивает...

26
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
20.04.2021, 05:23
Ann562002, берите отладчик в руки и смотрите почему "В позиции 0 строка отсутствует." Умение пользоваться им есть решение 99% проблем.
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
20.04.2021, 07:58  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
берите отладчик в руки и смотрите почему "В позиции 0 строка отсутствует."
запрос возвращает только строку с кодом и sda.Fill(dt);возвращает 0, но не могу понять, почему
1-2 фотки - не работает
3-4 - работает(другая форма)
Миниатюры
В позиции 0 строка отсутствует   В позиции 0 строка отсутствует   В позиции 0 строка отсутствует  

В позиции 0 строка отсутствует  
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
20.04.2021, 08:02
Цитата Сообщение от Ann562002 Посмотреть сообщение
sda.Fill(dt);возвращает 0, но не могу понять, почему
Берите профилировщик базы данных и смотрите какой запрос прилетает на исполнения в базу. Умение пользоваться им есть решение 99% проблем с базой.
0
fly
 Аватар для I can
4955 / 4644 / 844
Регистрация: 13.04.2015
Сообщений: 9,840
20.04.2021, 08:27
Цитата Сообщение от Ann562002 Посмотреть сообщение
Вход.login
Цитата Сообщение от Ann562002 Посмотреть сообщение
Вход.pass
Какое имеют значение при запросе?
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
23.04.2021, 20:14  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Какое имеют значение при запросе?
any в обоих случаях(вообще зависит от учётной записи, в которую зашли). Изменение в БД вносит, но ошибка сохраняется.
Миниатюры
В позиции 0 строка отсутствует  
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
23.04.2021, 20:58
Цитата Сообщение от Ann562002 Посмотреть сообщение
По тому же принципу код на другой форме работает(второй скрин)
И что? Принцип один, а запрос и результаты разные.

Цитата Сообщение от Usaga Посмотреть сообщение
В позиции 0 строка отсутствует.
Нет результатов - нет и строки. Помоему очевидно.

и как доказательство:
Цитата Сообщение от Ann562002 Посмотреть сообщение
1-2 фотки - не работает
3-4 - работает(другая форма)
Прям на скрине написано 'any' и 'an'. А вроде бы выше сказано что должно быть 'any' и 'any'
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 10:54  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Нет результатов - нет и строки. Помоему очевидно.
Строка есть

Цитата Сообщение от HF Посмотреть сообщение
Прям на скрине написано 'any' и 'an'. А вроде бы выше сказано что должно быть 'any' и 'any'
потому что пароль меняется, но после появляется такая ошибка
Миниатюры
В позиции 0 строка отсутствует  
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 18:33
Цитата Сообщение от Ann562002 Посмотреть сообщение
Строка есть
Докажите. Ваши скрины не информативны. Побольше locals данных как минимум. Ну и коллекцию
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.04.2021, 19:24
Зачем использовать адаптеры там, где они и нафиг не нужны ?
Все делается просто до безобразия:
1. ридером извлекается запись по логину и паролю.
2. Если есть, то простым command.executenonquery вносится изменение пароля.

Все запросы, естественно, параметрические

Никаких адаптеров, тэйблов и трехуровневых юзингов.
Весь код - десяток строк, не более.
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 19:25  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Побольше locals данных как минимум. Ну и коллекцию
Не очень поняла, что от меня требуется
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 19:39
Цитата Сообщение от Ann562002 Посмотреть сообщение
Не очень поняла, что от меня требуется
На скринах закладка "Видимые". В нормальной английской версии это называется "Locals" (вроде бы).
Но не суть.

Вы говорите - "данные есть в результате". Я хочу увидеть их. dt.Rows покажите.

И очень неинформативные скрины. На одном скрине есть запрос и мы видим и данные для поиска и то что Fill вернул 1.
А там где 0 не видно ни запроса, ничего. Поэтому я и говорю что данных не хватает и нет уверенности в том что у вас нормальный запрос и результаты.

Ну и про простой запрос тоже сказали. Это просто проверка доступа, делать адаптеры просто бессмыслено. Вы туда пишете изменения?
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 20:09  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
1. ридером извлекается запись по логину и паролю.
2. Если есть, то простым command.executenonquery вносится изменение пароля.
Ошибка, по сути, та же самая, только данные есть и тот же запрос выполняется в БД, да и if на наличие данных возвращает true
Миниатюры
В позиции 0 строка отсутствует   В позиции 0 строка отсутствует   В позиции 0 строка отсутствует  

0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 20:49
Цитата Сообщение от Ann562002 Посмотреть сообщение
Ошибка, по сути, та же самая, только данные есть и тот же запрос выполняется в БД, да и if на наличие данных возвращает true
Вот опять. Что вы тут "втираете"? На скрине написано - логин и пароль "an". И тут же в других скринах в БД ДРУГИЕ логины.
И где скрин тестового вида запроса который вы отправляете? Вы вот сами его возьмите и выполните в БД. Не ТО что вы хотите вызвать, а то что Фактически код выполняет. Command (cmd) объект смотрите, там вроде бы текстовый вид должен быть виден. Но блин, если красным написано textbox2="an" то что вы про "any" доказываете

Добавлено через 40 секунд
Цитата Сообщение от Ann562002 Посмотреть сообщение
только данные есть
Данных НЕТ. Об этом и ошибка. То что у вас в БД данные есть - ничего не значит. В ридере данных НЕТ.
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 20:55  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
в БД ДРУГИЕ логины.
Функция этой формы в смене пароля. Раньше я говорила, что пароль меняет, но выдаёт ошибку уже после изменения пароля.

Цитата Сообщение от HF Посмотреть сообщение
В ридере данных НЕТ.
Если бы это было так, то if (reader.HasRows) возвращало бы false



Цитата Сообщение от HF Посмотреть сообщение
если красным написано textbox2="an" то что вы про "any" доказываете
any - в базе данных
an - на что сменить
Миниатюры
В позиции 0 строка отсутствует  
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 21:09
Цитата Сообщение от Ann562002 Посмотреть сообщение
any - в базе данных
an - на что сменить
Сейчас стало понятнее что вообще происходит.

Тогда причём тут Селект? Вы делаете селект и должны получить адекватный результат.
Но в одном случае вы используете какие то переменные (явно статические и глобальные) Вход.* а в другом подставляете то что в текстбоксах (видимо то на что нужно поменять).
И зачем делать Fill? Вам нужно выполнить запрос и данные поменять. А вы сначала данные вытаскиваете из БД. Чтобы что? чтобы убедиться что пользователь есть? Тогда зачем использовать новые данные? пользователя "any" менять на "an"? обычно меняют пароли но никак не вместе с логином. Вообщем мне кажется у вас путаница с подходом в изменении данных, а тут ещё и авторизация.
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 21:17  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
используете какие то переменные (явно статические и глобальные) Вход.*
Цитата Сообщение от HF Посмотреть сообщение
а тут ещё и авторизация
Это нужно, чтобы понять, кто в системе. Чтобы нельзя было поменять пароль другого пользователя.

Цитата Сообщение от HF Посмотреть сообщение
пользователя "any" менять на "an"? обычно меняют пароли но никак не вместе с логином.
С логином никто не меняет. Я меняю пароль (any на an, чтобы при тестировании не пришлось каждый раз вводить сложные пароли, ещё и разные)

Добавлено через 1 минуту
Цитата Сообщение от HF Посмотреть сообщение
Тогда причём тут Селект?
Мне нужно сравнить текст из текстбокса "Старый пароль" с данными в БД
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 21:21
Цитата Сообщение от Ann562002 Посмотреть сообщение
Ошибка, по сути, та же самая, только данные есть и тот же запрос выполняется в БД, да и if на наличие данных возвращает true
Я выше ошибся. Да, сейчас лучше понял смысл.

Из того что вижу. Да, HasRows=true, но где reader.Read() ? Без него нет данных для чтения.
Из-за Fill помоему путаница какая-то ненужная.
0
0 / 0 / 0
Регистрация: 25.03.2020
Сообщений: 25
24.04.2021, 21:23  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
где reader.Read() ? Без него нет данных для чтения
Не знала, куда его нужно добавить?
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,691
Записей в блоге: 2
24.04.2021, 21:32
Цитата Сообщение от Ann562002 Посмотреть сообщение
Не знала, куда его нужно добавить?
Сразу перед чтением данных.
Вы когда в таблицу пихали, использовали Fill. Он просто выгребает вообще всё в виде таблицы.
А если построчно, то нужно через .Read считывать каждую строку.

Вот же, стандартный сценарий чтения в ADO
https://docs.microsoft.com/ru-... datareader
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2021, 21:32
Помогаю со студенческими работами здесь

Определить содержится ли в строке А строка Б, если да, то вывести номер позиции
Даны строки a и b. Определить содержится ли в строке А строка Б, если да, то вывести номер позиции. Нужно решить задачу c применением...

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

Ругается на строчку беспрестанно. (Ошибка:в позиции -1 строка отсутствует)
Ругается на строку : IDprod = Convert.ToString(Convert.ToInt32(OdinZakaz.Rows) + 1) + ","; Строчка: 177! using System; using...

Не могу исправить ошибки "В позиции 0 строка отсутствует" и "Значение '0' недопустимо для 'SelectedIndex'"
Когда в программе нажимаю кнопку "добавить" в строке DateTime parsedDate = DateTime.Parse(dtMark.Rows.ToString()); ошибка "В позиции 0...

Строка: Вывести нечетные символы во 2 строку экрана с 5-й позиции, а четные в 23-ю строку с 5-й позиции.
Помогите пожалуйста решить задачу на экзамен. Дана строка символов. Вывести нечетные символы во 2 строку экрана с 5-й позиции, а четные...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru