Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58

Разница в запросах из C# и IBexpert

23.02.2016, 14:33. Показов 1510. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал приложение записывающее данные приёмки сырья в базу данных. Оформил кучу SQL запросов на запись, чтение, проверку наличия записей. Всё работает кроме одной проверки наличия записи. Причём запрос в С# выполняется и возвращает отсутствие записи. Тупо копирую запрос в SQL editor IB expert тот возвращает наличие записи. Запись с такими данными на самом деле существует.
Если кто-то сталкивался с таким эффектом, подскажите пожалуйста решение.
Миниатюры
Разница в запросах из C# и IBexpert  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2016, 14:33
Ответы с готовыми решениями:

Разница в запросах к бд ?
Подскажите что больше грузит систему ? такой запрос : mysql_fetch_array(mysql_query("SELECT id FROM account WHERE login =...

Разница в запросах mysql и mysqli
Добрый вечер! Помогите разобраться, в чем ошибка? Один запрос написан с помощью mysql, а другой с mysqli. Но на mysql работает, а на...

IBExpert
Есть база на Firiberd 3.0 но IBExpert в свободном и бесплатном доступе нашел только с поддержкой 2.5 Где бесплатно найти для Fireberd...

6
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
23.02.2016, 17:16
реальный код давай
0
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
23.02.2016, 18: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
        public bool IsExistCarrier(string _company)
        {
            bool result = false;
            int count_entry = 0;
 
            try
            {
                carriers_database.Open();
                string request = "SELECT COUNT(CASE WHEN COMPANYNAME ='" + _company + "' THEN 1 ELSE NULL END) FROM CARRIERS";
                FbCommand command = new FbCommand(request, carriers_database);
 
                count_entry = command.ExecuteNonQuery();
                carriers_database.Close();
            }
            catch (Exception ex)
            {
                carriers_database.Close();
                throw ex;
            }
 
            if (count_entry > 0) { result = true; }
            return result;
        }
Этот код работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public bool IsExistUser(string login) {
            bool result = false;
            int count_entry = 0;
 
            try {
                users_database.Open();
                string request = "SELECT COUNT(CASE WHEN LOGIN='" + login + "' THEN 1 ELSE NULL END) FROM OPERATORS";
                FbCommand command = new FbCommand(request, users_database);
 
                count_entry = command.ExecuteNonQuery();
                users_database.Close();
            }
            catch (Exception ex) {
                users_database.Close();
                throw ex;
            }
 
            if (count_entry > 0) { result = true; }
            return result;
        }
Этот код работает не так, как хотелось бы:
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
        public bool IsExistWayBill(int waybill, string din)
        {
            bool result = false;
            int count_entry = 0;
 
            statistic_database.Open();
 
            try
            {
                string request = "SELECT COUNT(CASE WHEN WAYBILLNUM ='" + waybill + "' AND DIN = '" + din + "' THEN 1 ELSE NULL END) FROM SESSIONS";
                FbCommand command = new FbCommand(request, statistic_database);
 
                count_entry = command.ExecuteNonQuery();
                //statistic_database.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
 
            statistic_database.Close();
 
            if (count_entry > 0) { result = true; }
            return result;
        }
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
24.02.2016, 06:53
Цитата Сообщение от OldJerk Посмотреть сообщение
Этот код работает:
о_О
Цитата Сообщение от OldJerk Посмотреть сообщение
Этот код работает:
О_О
В общем, вердикт - стечение обстоятельств. Во всех трех случаях значение count_entry должно быть равно -1. Потому что метод ExecuteNonQuery возвращает количество обработанных командами UPDATE/INSERT/DELETE строк. В ваших запросах этих команд нет. значит должно всегда возвращаться -1. Нужно так:
C#
1
count_entry = (int)command.ExecuteScalar();
1
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
24.02.2016, 18:22  [ТС]
Спасибо! Заработало из C#. Не понятно, почему ExecuteNonQuery() работает в IB Expert?
Ну да и бог с ним.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
25.02.2016, 04:25
Лучший ответ Сообщение было отмечено OldJerk как решение

Решение

Цитата Сообщение от OldJerk Посмотреть сообщение
Не понятно, почему ExecuteNonQuery() работает в IB Expert?
Что вы имеете ввиду, когда говорите "Работает в IBExpoert"? DbCommand имеет 3 метода для исполнения команды на сервере:
1. ExecuteReader - Возвращает результирующий набор (результат выполнения команды SELECT), доступ к которому осуществляется через DbDataReader.
2. ExecuteScalar - Возвращает значение первого столбца первой строки результирующего набора
3. ExecuteNonQuery - Не возвращает результирующего набора. Возвращает количество строк, каторые были обработаны командами INSERT, UPDATE или DELETE. Для этих команда, по большому счету, и предназначена.
Вы проверяете наличие записи путем формирования результирующего набора из одного столбца и одной строки. Чтобы это значение прочитать, оптимально использовать метод ExecuteScalar.
PS: Почему был выбран запрос вида:
SQL
1
SELECT COUNT(CASE WHEN WAYBILLNUM = @waybill AND DIN = @din THEN 1 ELSE NULL END) FROM SESSIONS
, а не вида:
SQL
1
SELECT COUNT(*) FROM SESSIONS WHERE WAYBILLNUM = @waybill AND DIN = @din
Второй запрос и работать должен быстрее, и на вид понятнее и логичнее. А результат почти одинаковый. Почти, потому что в первом случае должно появляться предупреждение о том, что значения NULL не участвуют в формировании результата (по крайней мере на MS SQL Server будет так).
1
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
25.02.2016, 12:13  [ТС]
И ещё раз спасибо!
Уже дошло до меня, что в IB Expert я ввожу только строку запроса, а уж какой командой его выполнить он меня даже не спрашивает. А дело как раз в команде.
Но простите, я ещё только учусь, да ещё на коммерческом приложении. И приходится использовать и SQL и XML и Excel. Качественно изучить все просто нет времени. Вот сейчас буду создавать тему по работе из C# с формулами Excel.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2016, 12:13
Помогаю со студенческими работами здесь

ibexpert
всем привет!у кого-нибудь есть готовые базы данных по ibexpert-у?скиньте пожалуйста!

IBExpert
Есть такая функция в IBexpert ibec_ShellExecute, но она не ждет окончание выполнения vbs. Мне приходиться усыплять IBExpert, чтобы...

IBExpert
Доброе время суток, всем.. Хотела бы уточнить, какая физическая структура в БД IBExpert..Заранее спасибо.

Ibexpert не создает БД
Добрый вечер! Пытаюсь создать с помощью ibexpert БД, база вроде бы как регистрируется, но дальше не могу к ней подключится. Слышала, что...

Interbase и IBExpert
Всем привет, совершенно недавно начал работать с IB. Подскажите, нужно ли устанавливать для IBExpert -> Interbase, либо наоборот, не...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
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