Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209

SELECT в PostgreSQL: Can't cast database type record to Int32

16.07.2022, 17:51. Показов 5152. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Почему такой запрос не работает -

C#
1
2
3
4
5
6
 public string Request()
        {
            string request = $"SELECT (worker_id, first_name, last_name, workers.department_id) " +
                $"FROM workers ";
            return request;
        }
А так работает.
C#
1
2
3
4
5
 public string Request()
        {
            string request = $"SELECT * FROM workers ";
            return request;
        }
Всего в workers 4 поля.
Наверное вот здесь нужно как то по другому записать, но не получилось найти примера.
C#
1
SELECT (worker_id, first_name, last_name, workers.department_id)
Везде запросы либо - *, либо по одному полю запрос.
Так передаю сам запрос и обрабатываю его.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  void Select_All()
            {
                if(request.GetType() == new Select_All().GetType())
                {
                List<Worker> list = new List<Worker>();
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
 
                            Console.WriteLine("{0} {1} {2} {3} ", reader.GetInt32(0), reader.GetString(1),
                           reader.GetString(2), reader.GetInt32(4));
 
                            //worker.Worker_id = reader.GetInt32(0);
                            //worker.First_Name = reader.GetString(1);
                            //worker.Last_Name = reader.GetString(2);
                            //worker.Depatment_id = reader.GetInt32(3);
                            //worker.Depatment_parent_id = reader.GetInt32(4);
                            //worker.Salary = reader.GetInt32(4);
                            //worker.Type_Worker = reader.GetString(5);
                            //list.Add(worker);
                        }
                }
Добавлено через 6 минут
Под не работает я имею ввиду об ошибке - System.InvalidCastException: "Can't cast database type record to Int32"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2022, 17:51
Ответы с готовыми решениями:

Unable to cast object of type 'System.Int32' to type 'System.String' при выводе текстового свойства модели
Здравствуйте. При попытке вывести имя модели юзера именно с типом string вью, кидает упомянутое исключение. Если тип изменить на int. то...

Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой
Как я могу получить координаты всех точек, создаваемых данных методом? Мне необходимо это в дальнейшем чтобы посчитать количество...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type)
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет (DataBase cannot be resolved to a type), чем это можно исправить ...

51
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
16.07.2022, 18:04
Elektrik72, скобки уберите вокруг списка колонок.

Добавлено через 2 минуты
Хотя нет. Исключение вроде на стороне C#. Какие типы у колонок worker_id и department_id?

Добавлено через 3 минуты
Цитата Сообщение от Elektrik72 Посмотреть сообщение
if(request.GetType() == new Select_All().GetType())
Странный подход. Для проверки типа совсем не нужно создавать экземпляр
C#
1
if(request.GetType() == typeof(Select_All))
1
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
16.07.2022, 18:22
дапер и еще раз дапер
зачем придумывать велосипеды?
0
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
17.07.2022, 00:23  [ТС]
OwenGlendower, да спасибо, без скобок заработало и там еще ошибка reader.GetInt32(4)) - правильно reader.GetInt32(3)), я думал цифры в скобках это номера колонок в самой бд.
if(request.GetType() == typeof(Select_All))
Согласен, так лучше, спасибо)

Добавлено через 1 минуту
Dr9vik, А чем дапер предпочтительнее, это библиотека за место using Npgsql?
0
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
17.07.2022, 00:32  [ТС]
OwenGlendower,
Пользуясь случаем, чтоб темы не плодить так же спрошу про эту ошибку.

Ссылается на знак = в этом методе. Вроде бы запрос корректно написан, ошибка где то глубже в логике кода?
C#
1
2
3
4
5
6
7
8
9
10
public class Search : Columns, IRequest
    {
        public string Request()
        {
            string request = $"SELECT  department_id  FROM department" +
                $"WHERE department_id = {Depatment_id}";
 
            return request;
        }
    }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
17.07.2022, 00:41
Elektrik72, в таких случаях нужно задуматься какой запрос будет сформирован кодом. Подумайте, если не получается, то посмотрите в отладчике.
1
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
17.07.2022, 01:20  [ТС]
OwenGlendower, понял, перед WHERE нужно было пробел поставить, а то запрос слитно передавался - FROM departmentWHERE.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
17.07.2022, 01:23
Цитата Сообщение от Elektrik72 Посмотреть сообщение
А чем дапер предпочтительнее, это библиотека за место using Npgsql?
это орм
простой пример
C#
1
var user  = db.Query<User>("SELECT * FROM Users WHERE Id = @id", new { id }).FirstOrDefault();
а теперь сравниваем с вашим
как минимум вы с себя снимаете все проверки
1
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
17.07.2022, 01:35  [ТС]
Dr9vik, Спасибо, надо будет почитать про него и взять на вооружение)
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
17.07.2022, 01:41
а по поводу Npgsql
это просто провайдер
возможность работать с постгресом в шарпе
не более

Добавлено через 5 минут
Цитата Сообщение от Elektrik72 Посмотреть сообщение
Спасибо, надо будет почитать про него и взять на вооружение)
и да
советую все таки прочитать про Entity Framework
многие вещи будут еще проще, работа с базой, апгрейд(миграции) и тд
можно использовать Linq для запроса в базу, притом что вы нистрочки sql запроса не напишите
1
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
18.07.2022, 08:39
Цитата Сообщение от Dr9vik Посмотреть сообщение
советую все таки прочитать про Entity Framework
многие вещи будут еще проще, работа с базой, апгрейд(миграции) и тд
можно использовать Linq для запроса в базу, притом что вы нистрочки sql запроса не напишите
Пусть вначале с ADO + SQL разберётся... Работая с СУБД необходимо знать и понимать диалект SQL этой СУБД, а то потом нужно будет сложный запрос создать, который EF не сможет реализовать, что будет ТС делать?
2
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
18.07.2022, 09:49
Цитата Сообщение от Dr9vik Посмотреть сообщение
можно использовать Linq для запроса в базу, притом что вы нистрочки sql запроса не напишите
Это так не работает. Понимать какой SQL будет сгенерирован ТС будет обязан. Иначе в его рука EF превратится в проблему, а не её решение. Уже проходили и не раз.
2
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,692
Записей в блоге: 2
18.07.2022, 11:28
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Elektrik72, скобки уберите вокруг списка колонок.
Хотя нет. Исключение вроде на стороне C#. Какие типы у колонок worker_id и department_id?
Да вы всё правильно сказали.
Скобки в MSSQL вообще не сработают, он ожидает expression (например EXISTS).
А скобки в PG - вообще трансформируют в какой-то набор данных, типа массива.
Сравните результаты:
SQL
1
2
3
4
SELECT id_address, addresskeyset FROM dbo.address;
-- id_address (bigint), addresskeyset )character varying(50)
-- 10   "1 10"
-- 1050 "1 10 1016"
SQL
1
2
3
4
SELECT id_address, addresskeyset FROM dbo.address;
-- row(record)
-- "(1,1)"
-- "(10,""1 10"")"
Разумеется у него нет никаких данных выше 0 индекса.

Если бы Elektrik72 проверял свои запросы в IDE, то вопросов было бы меньше и понимал бы он больше.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 11:47
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Пусть вначале с ADO + SQL разберётся...
я не разобрался
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Работая с СУБД необходимо знать и понимать диалект SQL этой СУБД, а то потом нужно будет сложный запрос создать, который EF не сможет реализовать, что будет ТС делать?
изучать SQL тс будет тогда, что sql можно написать херню, что в коде можно написать херню

и по поводу sql, я до сих пор не помню как сделать create или Update в постгресе
надо вспомнить, пойду посмотрю на сайте
Цитата Сообщение от Usaga Посмотреть сообщение
Уже проходили и не раз.
если человек упертый и делает херню, то кто виноват?
и я советовал ЕФ по другой причине
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
18.07.2022, 12:07
Цитата Сообщение от Dr9vik Посмотреть сообщение
я не разобрался
Ваши проблемы...
Цитата Сообщение от Dr9vik Посмотреть сообщение
и я советовал ЕФ по другой причине
По какой интересно? Или следует из первого?
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 12:21
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
По какой интересно? Или следует из первого?
как минимум следит что база соответствует тем моделям что вы написали
и проще миграции делать
а linq приятный бонус, где не надо сидеть писать sql запросы
а заменив провайдер спокойно заработает все на другой базе

а у вас я вижу как всегда, автор уже типа интерпрайз решение пишет, поэтому низя!!!!
изучай!!!
ай ай
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
18.07.2022, 12:35
Цитата Сообщение от Dr9vik Посмотреть сообщение
автор уже типа интерпрайз решение пишет
ТС еще мало что понимает, и потому ему нужно разобраться в том КАК это работает, что бы потом спокойно продолжать работать с ADO, либо выбрать какую-нибудь ORM. А не понимая КАК оно работает ничего хорошего не напишешь...

А все ваши миграции - это просто игрушка для уровня БД из серии Hello World, попробуйте миграцию сделать на БД с более чем 100 таблицами, кучей тригеров, SP, UDF, View и т.д.
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
18.07.2022, 12:47
Цитата Сообщение от Dr9vik Посмотреть сообщение
и проще миграции делать
Далеко не всегда. EF про многие нюансы СУБД просто не вкурсе.

Цитата Сообщение от Dr9vik Посмотреть сообщение
а linq приятный бонус, где не надо сидеть писать sql запросы
Это только на игрушечных проектах. В реальном приложении приходится сначала подумать какой должен быть SQL в итоге, а потом уже писать LINQ. Это если нам нужно, чтобы оно эффективно заработало, а не абы как.

Цитата Сообщение от Dr9vik Посмотреть сообщение
а заменив провайдер спокойно заработает все на другой базе
Ничего подобного. Диалекты и оптимизаторы запросов в разных СУБД отличаются. И то, что на ура работало на MSSQL может начать гусегонить на Postgres (и обратное тоже справедливо). Опять же, заменяемость провайдеров чисто теоретическая. Запросы один фиг придётся тюнить.
1
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 13:04
Цитата Сообщение от Usaga Посмотреть сообщение
Далеко не всегда. EF про многие нюансы СУБД просто не вкурсе.
он внезапно узнает
Цитата Сообщение от Usaga Посмотреть сообщение
Это только на игрушечных проектах. В реальном приложении приходится сначала подумать какой должен быть SQL в итоге, а потом уже писать LINQ. Это если нам нужно, чтобы оно эффективно заработало, а не абы как.
90% это будет запросы уровня: дай вон того юзера по Id
Цитата Сообщение от Usaga Посмотреть сообщение
Ничего подобного. Диалекты и оптимизаторы запросов в разных СУБД отличаются. И то, что на ура работало на MSSQL может начать гусегонить на Postgres (и обратное тоже справедливо). Опять же, заменяемость провайдеров чисто теоретическая. Запросы один фиг придётся тюнить.
я вроде как про linq

Добавлено через 2 минуты
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
ТС еще мало что понимает
и я ему предлагаю упростить себе жизнь
вы ему предлагает с низа начать, я сверху
вот и вся разница
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
18.07.2022, 13:07
Цитата Сообщение от Dr9vik Посмотреть сообщение
он внезапно узнает
Что он узнает? Что в каких-то таблицах не только состав полей изменить надо, но и данные преобразовать по-хитрому? Или что какие-то таблицы надо во View завернуть для целей обратной совместимости со старыми системами? Всё, что EF "узнает" он может подчерпнуть только из модели данных, а эта модель - только поверхностный отпечаток схемы базы, которая может быть существенно сложнее. Не верьте в волшебство.

Цитата Сообщение от Dr9vik Посмотреть сообщение
90% это будет запросы уровня: дай вон того юзера по Id
В случае с игрушечными проектами - да. В более сложных случаях - сильно нет.

Цитата Сообщение от Dr9vik Посмотреть сообщение
я вроде как про linq
А я вроде как про то, что на разных СУБД из одного LINQ может порождаться разные SQL. И даже, если он будет один-в-одни, поведение и производительность могут отличаться. Поэтому довод о волшебной совместимости запросов - он очень условный.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2022, 13:07
Помогаю со студенческими работами здесь

The ViewData item that has the key 'EdLevel1' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>
Возникает такая ошибка. Вроде все правильно, не пойму в чем проблема &lt;div class=&quot;form-group&quot;&gt; ...

Ошибка CDO:Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.MailItem'
Здаствуйте у меня такая проблема, я получаю сообщения с Outlook'а путем простейших махинаций, когда запускаю цикл для сохранения имени...

Cannot determine embedded database driver class for database type NONE
Подскажите, что делать с этой гадостью. Был рабочий сайт все полностью работало, было даже несколько версий по обновлению. Теперь во...

Could not cast transparent proxy to type
Помогите решить проблему с этим исключением. Сижу ломаю голову и не могу понять. Полный код тут. Использую NetFramework 4.5.2 (Пробовал...

Cast interface to concrete type
Добрый день. Имеется агрегатор событий , у которого &quot;издатели и подписчики&quot; реализуют интерфейс &quot;IApplicationEvent&quot;. Понадобилось...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
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 Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru