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

System.InvalidOperationException: "Недопустимая попытка чтения при отсутствии данных."

01.09.2021, 16:01. Показов 7466. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имею вот такой код добычи данных из запроса:
C#
1
2
3
4
5
6
SqlCommand command1 = new SqlCommand("SELECT name1, name2, mame3 FROM Test WHERE id = '" + i + "'", Con1); 
                Con1.Open();
                SqlDataReader reader = command1.ExecuteReader();
                macro[i] = reader.GetString(0);
                nazv[i] = reader.GetString(1);
                nomer[i] = reader.GetString(2);
при выполнении кода возникает ошибка в строке
C#
1
macro[i] = reader.GetString(0);
, ошибка в заголовке, в чем дело не пойму, запрос рабочий, данные в reader должны быть.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2021, 16:01
Ответы с готовыми решениями:

System.InvalidOperationException: "Недопустимая попытка чтения при отсутствии данных." Как исправить?
/*Вызвано исключение в 44 строчке. Вроде всё правильно написано и все типы данных правильно указано*/ using System; using...

Недопустимая попытка чтения при отсутствии данных
Не могу понять почему выбивает эту ошибку:"недопустимая попытка чтения при отсутствии данных" int ID_contact = -1; ...

Исключение System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу упр
При запуске возникает исключение System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу...

31
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:10
aksident, читается из БД как-то примерно так
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
public static GenPlan GetByID(int gpID)
{
    GenPlan genPlan = new GenPlan();
    string sqlText = "SELECT ID_EObject, ID_GenPlan, KKS, GPName FROM dbo.tblGenPlan WHERE ID_GenPlan = @gpID";
 
    using (SqlConnection connection = new SqlConnection(_connectionString))
    {
        try
        {
            connection.Open();
 
            SqlCommand sqlCommand = new SqlCommand(sqlText, connection)
            {
                CommandType = CommandType.Text
            };
            SqlParameter param = new SqlParameter
            {
                ParameterName = "@gpID",
                Value = gpID,
                SqlDbType = SqlDbType.Int,
                Direction = ParameterDirection.Input
            };
            sqlCommand.Parameters.Add(param);
 
            using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    genPlan.IDEObject = (int)dataReader["ID_EObject"];
                    genPlan.IDGenPlan = (int)dataReader["ID_GenPlan"];
                    genPlan.KKS = dataReader["KKS"] as string ?? "";
                    genPlan.GPName = dataReader["GPName"] as string ?? "";
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    return genPlan;
}
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
01.09.2021, 16:10
aksident,
... там точно третье поле mame3, а не name3? ... и еще, у вас в базе поле id строковое ..?
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:12  [ТС]
id int, оно используется только в качестве условия, я же написал что запрос рабочий 100%, проверен, просто reader почему то пустой
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:13
Цитата Сообщение от aksident Посмотреть сообщение
id int
в вашем запросе это строка
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:14  [ТС]
Что то как то слишком замудренно, мне просто нужно разложить одну строку из БД по переменным и все
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
01.09.2021, 16:16
Цитата Сообщение от aksident Посмотреть сообщение
я же написал что запрос рабочий 100%, проверен
..вы его где проверяли? .. если в менеджере БД, то скопировали оттуда правильно? ..
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:18  [ТС]
разницы нет, убрал одинарные кавычки результат тот же, в SQL Server Management Studio все работает, с кавычками и без

Добавлено через 53 секунды
Скопировано правильно, еще для верочки скопировал его обратно и проверил
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
01.09.2021, 16:19
aksident,
.. и третье поле mame3 (маша-аня-маша-аня) ..?

Добавлено через 1 минуту
Цитата Сообщение от aksident Посмотреть сообщение
Скопировано правильно, еще для верочки скопировал его обратно и проверил
.. тогда строку подключения смотрите ... а Con1 у вас инициализировано? ...
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:22  [ТС]
в таблице тип всех столбцов (кроме id) nvchar

Добавлено через 1 минуту
да, инициализировано, иначе на Con1.Open(); он бы ругался
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
01.09.2021, 16:29
aksident,
.. а переменная i в порядке? .. вообще по этому огрызку кода сложно что-то увидеть .. у вас же там цикл, как я понимаю? .. подставьте в запрос реальный id, который точно есть в базе .. для проверки ...
.. и я вам не о типе третьего поля говорил, а о его имени в запросе ...
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:31
aksident, Я вам показал пример как читать из БД. Пробуйте. Вместо объекта пишите данные в переменные.
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:31  [ТС]
Да уже проделал это все, i тоже в порядке, в пошаговой отладке просматриваю запрос, все нормально, скопировал его оттуда в менеджер БД, работает, здесь же нет, что за....
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
01.09.2021, 16:32
aksident, сделайте, как тут
а то код в теме письма невнятный
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:36  [ТС]
А мой код чем плох не пойму? всегда исправно работал, только здесь чудеса выкидывает

Добавлено через 1 минуту
Блин, да у меня всего одна строка, там 3 значения, зачем мне городить километровый код для этого?
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:42
Цитата Сообщение от aksident Посмотреть сообщение
зачем мне городить километровый код для этого?
Code
1
2
3
Слыш прога, мне надо вот это вывести.
 
Я жду...
вам надо так?
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:42  [ТС]
Сделаю код по внятнее, вот полностью код:
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
string connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; //Здесь твоя строка подключения
            SqlConnection Con = new SqlConnection(connectionString); 
            SqlCommand command1 = new SqlCommand("SELECT MIN(id) FROM Test", Con", Con1);
            Con.Open();
            int min = (Int32)command.ExecuteScalar();
            SqlCommand com = new SqlCommand("SELECT MAX(id) FROM Test", Con); 
            int max = (Int32)com.ExecuteScalar();
            Con.Close();
            string[] macro = new string[40];
            string[] nazv = new string[40];
            string[] nomer = new string[40];
            for (int i = min; i < max; i++)
            {
                SqlConnection Con1 = new SqlConnection(connectionString);
                SqlCommand command1 = new SqlCommand("SELECT name1, name2, mame3 FROM Test WHERE id = '" + i + "'", Con1);
                Con1.Open(); 
               SqlDataReader reader2 = command1.ExecuteReader()
                
                macro[i] = reader2.GetString(0);
                nazv[i] = reader2.GetString(1);
                nomer[i] = reader2.GetString(2);
                
                Con1.Close();
 
            }
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:44
Цитата Сообщение от aksident Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
for (int i = min; i < max; i++)
 {
 SqlConnection Con1 = new SqlConnection(connectionString);
 SqlCommand command1 = new SqlCommand("SELECT name1, name2, mame3 FROM Test WHERE id = '" + i + "'", Con1);
 Con1.Open(); 
 SqlDataReader reader2 = command1.ExecuteReader()
macro[i] = reader2.GetString(0);
 nazv[i] = reader2.GetString(1);
 nomer[i] = reader2.GetString(2);
Con1.Close();
}
вы зачем так сервак мучаете???
Не проще всё считать в коллекцию и уже ее дербанить?
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 160
01.09.2021, 16:46  [ТС]
Потому что начинающий, и до коллекций еще не дошел, как с ними работать слабо представляю, в общем делаю как могу, прекрасно понимаю что нагрузка на сервак бешеная
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
01.09.2021, 16:50
aksident, чтение в коллекцию. Заодно показано как проверять на null во время чтения.
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
public static List<WorkDrawData> GetWorkDrawDatasBySysID(int idDrawSys)
{
    List<WorkDrawData> workDrawDatas = new List<WorkDrawData>();
    string sqlText =
        "SELECT DrawNum, List, SpecPos, Naimenovanie, Material, TrMont, TrIzg, TrKoeff, PPDiametr, " +
        "TrKoeffIzg, ID_NaryadZakaz, ID_Draw, ID_DrawSys, ID_DrawSpec, Kolvo, KolvoIzg " +
        "FROM dbo.vwPPDrawData " +
        "WHERE ID_DrawSys = @idDrawSys";
 
    using (SqlConnection connection = new SqlConnection(_connectionString))
    {
        try
        {
            connection.Open();
 
            SqlCommand sqlCommand = new SqlCommand(sqlText, connection)
            {
                CommandType = CommandType.Text
            };
            SqlParameter idSys = new SqlParameter
            {
                ParameterName = "@idDrawSys",
                Value = idDrawSys,
                SqlDbType = SqlDbType.Int,
                Direction = ParameterDirection.Input
            };
            sqlCommand.Parameters.Add(idSys);
 
            using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    workDrawDatas.Add(new WorkDrawData
                    {
                        DrawNum = dataReader["DrawNum"] as string ?? "",
                        DrawSystem = dataReader["List"] as string ?? "",
                        DrawSpecPos = (int)dataReader["SpecPos"],
                        NameOfSpecPos = dataReader["Naimenovanie"] as string ?? "",
                        Material = dataReader["Material"] as string ?? "",
                        LaborErect = dataReader["TrMont"] == DBNull.Value ? null : (double?)dataReader["TrMont"],
                        LaborAssembly = dataReader["TrIzg"] == DBNull.Value ? null : (double?)dataReader["TrIzg"],
                        ErectCoef = dataReader["TrKoeff"] == DBNull.Value ? null : (double?)dataReader["TrKoeff"],
                        Work = dataReader["PPDiametr"] as string ?? "",
                        AssemblyCoef = dataReader["TrKoeffIzg"] == DBNull.Value ? null : (double?)dataReader["TrKoeffIzg"],
                        IDWorkOrder = dataReader["ID_NaryadZakaz"] == DBNull.Value ? null : (int?)dataReader["ID_NaryadZakaz"],
                        IDDraw = (int)dataReader["ID_Draw"],
                        IDDrawSys = (int)dataReader["ID_DrawSys"],
                        IDDrawSpec = (int)dataReader["ID_DrawSpec"],
                        QtyErect = dataReader["Kolvo"] == DBNull.Value ? null : (double?)dataReader["Kolvo"],
                        QtyAssembly = dataReader["KolvoIzg"] == DBNull.Value ? null : (double?)dataReader["KolvoIzg"]
                    });
                }
            }
            return workDrawDatas;
        }
        catch (Exception ex)
        {
            throw new ApplicationException("Ошибка выборки данных", ex);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2021, 16:50
Помогаю со студенческими работами здесь

Недопустимая попытка вызвать Read при закрытом устройстве чтения
День добрый. Подскажите п. Как проверить есть ли совпадение. М т.е. в условие нужно занести лож или истена в зависимости от того...

System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 2
В предыдущей теме некто вообразил, что код зацикливается, поэтому приходится выкладывать более широкую модель. Надеюсь, до целого проекта...

System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 3
Уже простите за некомпилируемый код, просто я переустановил Windows, и Visual Studio удалилась, только сегодня днем установил. Код там...

При запуске выдает ошибку System.InvalidOperationException: "The specified cast from a materialized 'System.Decimal'
ошибка выдается на этом моменте ObservableCollection &lt; Plane &gt; planes = new ObservableCollection&lt;Plane&gt;(result_planes); вот как...

System.AccessViolationException: Попытка чтения или записи в защищенную память
using System; using System.Collections.Generic; using System.Data.Odbc; using System.Data; using System.Linq; using System.Text; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
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, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru