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

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

04.05.2021, 23:24. Показов 1790. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста понять что ему не нравится, я вообще никаких идей не имею что не так. Всегда применял этот способ и всё отлично работало, но сейчас вдруг без какой-либо причины перестало.
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
private void updateButton_Click(object sender, EventArgs e)
        {
            DataContext db = new DataContext(connectionString);
            var k = dataGridView1.SelectedRows.Cast<DataGridViewRow>().Select(z => z.Index).ToList(); // нахожу список индексов выделенных строк в DataGrid
            foreach (var number in k) // определяю ID, которые нужно будет удалить или изменить
            {
                IdToChange.Add(Convert.ToInt32(dataGridView1[0, number].Value));
            }
            if (IdToChange.Count == 1)
            {
                Mark cnhMark = (from c in db.GetTable<Mark>()
                                             where c.Id == IdToChange[0]
                                             select c).SingleOrDefault<Mark>(); //вот тут ошибка
 
 
                if (cnhMark.IdDiscipline == Convert.ToInt32(cmbDiscipline2.SelectedValue) && cnhMark.IdStudent == Convert.ToInt32(cmbStudent2.SelectedValue))
                {
                    cnhMark.Typemark = Convert.ToSingle(tbMark2.Text);
                    db.SubmitChanges();
                    updateDGV();
                }
                else if (StdDnthaveMark())
                {
                    cnhMark.IdStudent = Convert.ToInt32(cmbStudent2.SelectedValue);
                    cnhMark.IdDiscipline = Convert.ToInt32(cmbDiscipline2.SelectedValue);
                    cnhMark.Typemark = Convert.ToSingle(tbMark2.Text);
                    cnhMark.Date = tbDate2.Text;
                    db.SubmitChanges();
                    updateDGV();
 
                }
                else
                {
                    MessageBox.Show("Оценка по этой дисциплине уже выставлена.");
                }
            }
            else
                MessageBox.Show("Вы не можете одновременно изменить 2 строки.");
        }
Миниатюры
System.InvalidCastException: "Заданное приведение является недопустимым."  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2021, 23:24
Ответы с готовыми решениями:

System.InvalidCastException: "Заданное приведение является недопустимым."
Вот так выглядит класс. Вот так выглядит таблица в БД. class Para { public int Id { get; set; } ...

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

System.InvalidCastException: "Заданное приведение является недопустимым."
Пытаюсь сохранить данные в sql итоги ошибка System.InvalidCastException: &quot;Заданное приведение является недопустимым.&quot; Ошибка...

10
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
04.05.2021, 23:25  [ТС]
Вот как выглядит класс Mark
C#
1
2
3
4
5
6
7
8
9
10
11
{
    [Table(Name = "mark")]
    class Mark
    {
        [Column(Name = "id_mark", IsPrimaryKey = true, IsDbGenerated = false)] public int Id { get; set; }
        [Column(Name = "id_student")] public int IdStudent { get; set; }
        [Column(Name = "id_discipline_academic")] public int IdDiscipline { get; set; }
        [Column(Name = "mark")] public float Typemark{ get; set; }
        [Column(Name = "date_time")] public string Date { get; set; }
    }
}
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
05.05.2021, 00:30
C#
1
Mark cnhMark = (from c in db.GetTable<Mark>()  where c.Id == IdToChange[0]  select c).SingleOrDefault();
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
05.05.2021, 00:35  [ТС]
MsGuns, А что изменилось?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
05.05.2021, 00:41
Нету <Mark> в хвосте.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
05.05.2021, 00:51  [ТС]
MsGuns, Не помогает, та же ошибка.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
05.05.2021, 02:18
Весь Ваш код, буквально каждая строчка, яркий пример того, как НЕ надо программировать.
1. Суете код работы с БД в обработчик события элемента интерфейса
2. Использование глобальной переменной (connectionstring) в классах, не имеющих отношения к контексту EF.
3. Создание контекста EF в обработчике события + где-то извне определенный параметр строки соединения
4. Использование глобальной переменной (IdToChange) в качестве локального временного хранилища данных
5. Противоречивая логика: резервируется целый список для Id, которые могут быть изменены/удалены, но тут же внизу логика, исключающая множество. "В чем сила, брат ?" (с)
6. Совершенно идиотское извлечение id модифицируемой записи из грида.
7. Определили id, затем лезем в базу и извлекаем по нему запись. Зачем тут конструкция from, если тут простое обращение в DBSet контекста c расширением FirstorOrDefault() с последующей проверкой на null (а вдруг запись была удалена с другого соединения). Но - нет, только хардкор и безо всяких проверок - Бог не выдаст, свинья не съест.
8. Про Модель уже устал говорить - очередная "картина маслом", или "Новичок и Code First". В топку !
9. Ну и все эти конверты - чувствуется волшебная сила копипасты. Бездумной и животворящей.

Хватит, хотя руки чешутся облить дегтем каждую строку Вашего чудо-кода.
И это еще и
Цитата Сообщение от danhiroman Посмотреть сообщение
всё отлично работало
- с ума застрелиться !

Добавлено через 13 минут
И отдельно про Code First.
Уважаемый, Вам кто-то "вумный" сказал, что Code First построит за Вас Правильную Схему Базы Данных ?
Вас обманули !!!
С теми каракулями, которые Вы мните за "Таблицы" БД в Ваших классах - моделях, без правильной нотации, EF соорудит в БД
вместо красивого здания кособокий дровяной "туалэт типа сортир", который будет рушиться после каждого легкого ветерка.
Прежде чем лезть "с ногами" в создание таблиц" в Code First, необходимо знать хотя бы минимум. Элементарный. Например, Foreign key, как он указывается в моделях. Как поддерживается связь один-ко-многим и много-к-одному, многие-ко-многим. Что такое обязательные колонки таблицы (NOT NULL) и что необязательные. И так далее..
И SQL.. Его надо знать - никакие ORM не избавят Вас от необходимости знать и понимать хотя бы его основы. Если Вам сказали обратное - Вас опять же жестоко обманули.

Добавлено через 14 минут
Цитата Сообщение от danhiroman Посмотреть сообщение
[Column(Name = "id_mark", IsPrimaryKey = true, IsDbGenerated = false)] public int Id { get; set; }
Почему нет автогенерации Id ? Ключ Id обязан быть счетчиком ! Вас кто-то опять обманул !
Цитата Сообщение от danhiroman Посмотреть сообщение
[Column(Name = "id_student")] public int IdStudent { get; set; }
        [Column(Name = "id_discipline_academic")] public int IdDiscipline { get; set; }
Тут явно просматриваются ссылки на другие таблицы (foreign key), но нет ни намека на это Важное обстоятельство
Цитата Сообщение от danhiroman Посмотреть сообщение
[Column(Name = "mark")] public float Typemark{ get; set; }
Что за сущность Typemark ? Она измеряется в наносекундах, микронах, миллиграммах ? Зачем такая точность ?
Бездумное использование флоат потенциально порождает проблемы. Например при округлении результатов подсчета сумм.
Или при выборке по флоат-полям.
Цитата Сообщение от danhiroman Посмотреть сообщение
[Column(Name = "date_time")] public string Date { get; set; }
Определение полей-дат в таблицах БД как строк символов.. за это надо сразу резать помидоры. Оба !
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,949
05.05.2021, 08:20
Цитата Сообщение от MsGuns Посмотреть сообщение
EF соорудит в БД
Это не EF. Это его старший брат-близнец LinqToSQL.

Цитата Сообщение от danhiroman Посмотреть сообщение
where c.Id == IdToChange[0]
Попробуйте убрать обращение к коллекции из выражения. Замените на само значение.

Цитата Сообщение от danhiroman Посмотреть сообщение
Вот как выглядит класс Mark
Какой-то из типов свойств не соответствует типу в базе? Или может быть значение не помещается в выбранный тип при материализации. Проверьте это.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
05.05.2021, 12:35  [ТС]
MsGuns, Спасибо за критику
0
05.05.2021, 12:49

Не по теме:

Цитата Сообщение от danhiroman Посмотреть сообщение
Спасибо за критику
Хотелось бы думать, что Вы не обиделись :)

0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
05.05.2021, 13:04  [ТС]
MsGuns,

Не по теме:

Нет всё окей.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2021, 13:04
Помогаю со студенческими работами здесь

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

Заданное приведение является недопустимым EF
Когда пытаюсь получить значение из базы то получаю ошибку. &quot;System.Reflection.TargetInvocationException: Адресат вызова создал...

Заданное приведение является недопустимым
Возникает такая ошибка &quot;Заданное приведение является недопустимым&quot; в этой строке, подскажите как правильно преобразовать ...

Явная загрузка и ошибка Заданное приведение является недопустимым
Приветствую, ребята. Подскажите в чем может быть ошибка. Имеется вот такая структура БД Прописываю код для каждой сущности: ...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru