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

System.InvalidCastException: "Заданное приведение является недопустимым."

29.05.2024, 14:23. Показов 815. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как исправить? Вроде все совпадает







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
namespace Lex_Comp_Tech
{
    enum RowState
    {
        Existed,
        New,
        Modified,
        ModifiedNew,
        Deleted
    }
    public partial class MainForm : Form
    {
        private readonly CheckUser _user;
        DataBase dataBase = new DataBase();
        int selectedRow;
        public MainForm(CheckUser user)
        {
            InitializeComponent();
            _user = user;
        }
        
        private void IsAdmin()
        {
            управлениеToolStripMenuItem.Enabled = _user.Role;
            buttonAdd.Enabled = _user.Role;
        }
 
        private void CreateColums()
        {
            dataGridView1.Columns.Add("ID", "Код техники");
            dataGridView1.Columns.Add("TechName", "Название");
            dataGridView1.Columns.Add("Description", "Описание");
            dataGridView1.Columns.Add("Condition", "Состояние");
            dataGridView1.Columns.Add("DateOfPurchase", "Дата покупки");
            dataGridView1.Columns.Add("Employee", "Сотрудник");
            dataGridView1.Columns.Add("Supplier", "Поставщик");
            dataGridView1.Columns.Add("Availability", "Наличие техники");
            dataGridView1.Columns.Add("Count", "Количество");
        }
 
        private void ReadSingleRow(DataGridView dgv, IDataRecord record)
        {
            dgv.Rows.Add(record.GetInt32(0), 
                record.GetString(1), 
                record.GetString(2), 
                record.GetString(3), 
                record.GetDateTime(4), 
                record.GetInt32(5), 
                record.GetInt32(6), 
                record.GetString(7), 
                record.GetInt32(8));
        }
 
        private void RefreshDataGrid(DataGridView dgv)
        {
            string queryString = $"select * from Tech";
            
            SqlCommand command = new SqlCommand(queryString, dataBase.getConnection());
            dataBase.getConnection().Open();
            SqlDataReader reader = command.ExecuteReader();
 
            while(reader.Read())
            {
                ReadSingleRow(dgv, reader);
            }
            reader.Close();
            dataBase.getConnection().Close();
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            tlsUserStatus.Text = $"{_user.Login}: {_user.Status}";
            IsAdmin();
            CreateColums();
            RefreshDataGrid(dataGridView1);
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2024, 14:23
Ответы с готовыми решениями:

System.InvalidCastException: "Заданное приведение является недопустимым."
Нажимаю на строчку в таблице - выдает эту ошибку (System.InvalidCastException: "Заданное приведение является недопустимым."). ошибка...

При рисовании фигуры ошибка: "Заданное приведение является недопустимым"
При рисовании фигуры выскакивает ошибка: "Заданное приведение является недопустимым." Указывает на строку (file Form2): ...

Приведение является недопустимым
currentQuestions.Answers.Add(new Answer { ID = (int)reader, ...

16
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 14:41
SUp3r_p0m1d0r, А кто мешает по правильному читать данные из ридера. Вот для примера, типы данных мои, чтение в коллекцию с явным указанием конвертации, указанием полей запроса и проверками на 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
using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync())
{
    while (await sqlDataReader.ReadAsync())
    {
        draws.Add(new Draw
        {
            DrawID = (int)sqlDataReader["ID_Draw"],
            GPlanID = (int)sqlDataReader["ID_GenPlan"],
            DNumber = sqlDataReader["DrawNum"]
                == DBNull.Value ? null : (string)sqlDataReader["DrawNum"],
            DName = sqlDataReader["DrawName"]
                == DBNull.Value ? null : (string)sqlDataReader["DrawName"],
            DStage = sqlDataReader["Stage"]
                == DBNull.Value ? null : (string)sqlDataReader["Stage"],
            DStageTEP = (int)sqlDataReader["StageTEP"],
            DWorks = sqlDataReader["Works"]
                == DBNull.Value ? null : (string)sqlDataReader["Works"],
            DByUnit = (int)sqlDataReader["ByUnit"],
            DWorkID = sqlDataReader["ID_DWork"]
                == DBNull.Value ? null : (int?)sqlDataReader["ID_DWork"],
            BranchID = sqlDataReader["ID_Branch"]
                == DBNull.Value ? null : (int?)sqlDataReader["ID_Branch"]
        });
    }
}
Добавлено через 51 секунду
SUp3r_p0m1d0r, На await/async внимания не обращайте...

Добавлено через 9 минут
SUp3r_p0m1d0r, Вот чтение одной записи в объект типа
C#
1
2
3
4
5
6
7
8
9
10
11
12
using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync())
{
    item.PPWorkID = (int)sqlDataReader["ID_PPWork"];
    item.Labor = sqlDataReader["Labor"]
        == DBNull.Value ? null : (decimal?)sqlDataReader["Labor"];
    item.CoeffE = sqlDataReader["ErectCoeff"]
        == DBNull.Value ? null : (decimal?)sqlDataReader["ErectCoeff"];
    item.LaborA = sqlDataReader["LaborA"]
        == DBNull.Value ? null : (decimal?)sqlDataReader["LaborA"];
    item.CoeffA = sqlDataReader["CoeffA"]
        == DBNull.Value ? null : (decimal?)sqlDataReader["CoeffA"];
}
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
29.05.2024, 14:50
SUp3r_p0m1d0r, насколько я вижу структуре таблицы и код соответствуют друг другу и поэтому ошибки быть не не должно. Попробуйте явно перечислить колонки в запросе:
C#
56
            const string queryString = "select ID, TechName, Description, Condition, DateOfPurchase, Employee, Supplier, Availability, Count from Tech";
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 15:32  [ТС]
Попробовал, ошибка в том же месте
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 15:46
SUp3r_p0m1d0r, Покажите вывод запроса в MS SQL Server.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
29.05.2024, 15:56
Цитата Сообщение от SUp3r_p0m1d0r Посмотреть сообщение
Попробовал, ошибка в том же месте
Сделайте то что посоветовал Andrey-MSK. Похоже у вас где-то есть NULL значения, несмотря на то что на первом скриншоте у вас все колонки NOT NULL.
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 16:05  [ТС]
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 16:20
SUp3r_p0m1d0r, Напишите запрос не со *, а полным перечислением полей, как показал OwenGlendower, и чтение сделайте в коллекцию, я показал выше как, для Windows Forms тип коллекции BindingList<T>, где T ваш класс данных, который повторяет поля вашего запроса. И привяжите эту коллекцию в DataSource своего DataGridView.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
29.05.2024, 16:22
SUp3r_p0m1d0r, тогда давайте вынесем чтение колонок в отдельные строки чтобы понять на какую именно колонку он ругается:
C#
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
private void ReadSingleRow(DataGridView dgv, IDataRecord record)
{
    var col0 = record.GetInt32(0);
    var col1 = record.GetString(1);
    var col2 = record.GetString(2);
    var col3 = record.GetString(3);
    var col4 = record.GetDateTime(4);
    var col5 = record.GetInt32(5);
    var col6 = record.GetInt32(6);
    var col7 = record.GetString(7);
    var col8 = record.GetInt32(8);
    dgv.Rows.Add(col0, col1, col2, col3, col4, col5, col6, col7, col8);
 
    //dgv.Rows.Add(record.GetInt32(0),
    //    record.GetString(1),
    //    record.GetString(2),
    //    record.GetString(3),
    //    record.GetDateTime(4),
    //    record.GetInt32(5),
    //    record.GetInt32(6),
    //    record.GetString(7),
    //    record.GetInt32(8));
}
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 16:22
SUp3r_p0m1d0r, И колонки DataGridView с помощью конструктора или кода привяжите к полям класса данных.
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 16:23  [ТС]
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 16:26
SUp3r_p0m1d0r, В запросе Count возьмите в экран - [Count]. Может тут косяк идёт...
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 16:29  [ТС]
Нет... Все так же... Могу вот ещё показать
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 16:34
SUp3r_p0m1d0r, Похоже на дату ругается...

Добавлено через 1 минуту
SUp3r_p0m1d0r,
C#
1
(DateTime)sqlDataReader["DateOfPurchase"]
Добавлено через 2 минуты
SUp3r_p0m1d0r, Вместо номеров проставьте имена полей запроса... Или перепишите всё как я показал...
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 16:39  [ТС]
И куда это вписать
0
0 / 0 / 0
Регистрация: 15.02.2023
Сообщений: 29
29.05.2024, 16:41  [ТС]
0
 Аватар для Andrey-MSK
3356 / 2242 / 388
Регистрация: 14.08.2018
Сообщений: 7,580
Записей в блоге: 4
29.05.2024, 16:45
Цитата Сообщение от SUp3r_p0m1d0r Посмотреть сообщение
И куда это вписать
Перепишите вот так всё, и сделайте один метод, который читает сразу куда надо.
Пример, данные не ваши, а мои
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
List<Draw> draws = new List<Draw>();
string sqlText =
    "SELECT d.ID_Draw, d.ID_GenPlan, d.DrawNum, d.DrawName, d.Stage, d.StageTEP, d.Works, d.ByUnit, d.ID_DWork, d.ID_Branch " +
    "FROM dbo.tblEObject e LEFT JOIN  " +
    "dbo.tblGenPlan g ON e.ID_EObject = g.ID_EObject LEFT JOIN " +
    "dbo.tblDraw d ON g.ID_GenPlan = d.ID_GenPlan " +
    "WHERE e.ID_EObject = @id AND (d.DrawNum IS NOT NULL OR d.DrawNum <> N'')";
 
try
{
    using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
    {
        using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection))
        {
            SqlParameter paramID = new SqlParameter
            {
                ParameterName = "@id",
                Value = mainItem.EObjectID,
                SqlDbType = SqlDbType.Int,
                Direction = ParameterDirection.Input
            };
            sqlCommand.Parameters.Add(paramID);
 
            sqlCommand.Connection.OpenAsync();
 
            using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
            {
                while (sqlDataReader.Read())
                {
                    // Здесь читаете в свою коллекцию класса данных
                    draws.Add(new Draw
                    {
                        DrawID = (int)sqlDataReader["ID_Draw"],
                        GPlanID = (int)sqlDataReader["ID_GenPlan"],
                        DNumber = sqlDataReader["DrawNum"]
                            == DBNull.Value ? null : (string)sqlDataReader["DrawNum"],
                        DName = sqlDataReader["DrawName"]
                            == DBNull.Value ? null : (string)sqlDataReader["DrawName"],
                        DStage = sqlDataReader["Stage"]
                            == DBNull.Value ? null : (string)sqlDataReader["Stage"],
                        DStageTEP = (int)sqlDataReader["StageTEP"],
                        DWorks = sqlDataReader["Works"]
                            == DBNull.Value ? null : (string)sqlDataReader["Works"],
                        DByUnit = (int)sqlDataReader["ByUnit"],
                        DWorkID = sqlDataReader["ID_DWork"]
                            == DBNull.Value ? null : (int?)sqlDataReader["ID_DWork"],
                        BranchID = sqlDataReader["ID_Branch"]
                            == DBNull.Value ? null : (int?)sqlDataReader["ID_Branch"]
                    });
                }
            }
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
Добавлено через 2 минуты
Проверки на NULL можно не делать, у вас все поля NOT NULL.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2024, 16:45
Помогаю со студенческими работами здесь

System.InvalidCastException: "Не удалось привести тип объекта "System.Windows.Forms.TableLayoutPanel" к типу "System.Win
namespace WindowsFormsApp1 { public partial class Form1 : Form { Game game; public Form1() { ...

System.InvalidCastException: "Не удалось привести тип объекта "System.Byte[]" к типу "System.Drawing.Bitmap"."
Ошибка System.InvalidCastException: &quot;Не удалось привести тип объекта &quot;System.Byte&quot; к типу &quot;System.Drawing.Bitmap&quot;.&quot; Как...

Как убрать ошибку System.InvalidCastException: Заданное приведение является недопустимым
Уже достаточно много информации в интернете пересмотрел, но так и не понял как сделать то, что мне нужно. Подскажите, пожалуйста, хотя бы...

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

System.InvalidCastException: "Заданное приведение является недопустимым."
Добрый день , нужно строку конвертировать в математическое действие , нашел такой способ: float result_math = (float)new...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru