Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, Entity Framework
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1

Каким образом можно избежать исключения в SQL запросе? Код метода внутри.

11.06.2011, 16:32. Показов 2064. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Когда я вызываю этот метод и в качестве искомого значения ввожу не существующее в таблице, то на строке ID = (int)sqlCommand.ExecuteScalar(); Вылетает исключение:
Ссылка на объект не указывает на экземпляр объекта.
Я понимаю, что в таблице значение не найдено и вернуло null. Но как избежать исключения и вернуть -1 в случае, если значение не найдено? Можно конечно в try catch ID присвоить -1 (как я и сделал), но это как-то по нубски мне кажется, хотя кто его знает...

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
        private int GetIDFromTable(String TableName, String ColumnName, String DesiredValue)
        {
            SqlCommand sqlCommand = null;
            SqlConnection sqlConnect = null;
            int ID = -1;
            try
            {
                sqlConnect = new SqlConnection(connectionString);
 
                if (sqlConnect.State != System.Data.ConnectionState.Open)
                    sqlConnect.Open();
 
                sqlCommand = sqlConnect.CreateCommand();
                sqlCommand.CommandText = "SELECT ID FROM " + TableName + " WHERE " + ColumnName + " = @Name";
                sqlCommand.Parameters.AddWithValue("@Name", DesiredValue);
 
                ID = (int)sqlCommand.ExecuteScalar();
            }
            catch (Exception)
            {
                return -1;
            }
            finally
            {
                sqlConnect.Close();
                sqlConnect.Dispose();
 
                sqlCommand.Dispose();
            }
 
            return ID;
        }
Или всё же так и оставить? Стоит ли оно того, чтобы заморачиваться?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2011, 16:32
Ответы с готовыми решениями:

Каким образом можно построить и связать ООП код с данными из БД
День добрый! Есть задание , которое нужно решить как можно скорее , но возникли некоторые трудности. Прикладываю к сообщению документ...

Каким образом можно из метода одного класса, вывести в метод другого класса текст всплывающего сообщения
Доброе время суток! Есть метод отрисовки всплывающего сообщения public void SetBalloonTip() // метод отрисовки всплывающег...

Избежать конкатенации строк при запросе SQL
Знаю, что использовать конкатенацию строк при создании запроса SQL плохо. Но мне нужно создавать запрос, смотря активен ли чекбокс или нет....

9
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
11.06.2011, 19:56
Так:
C# Скопировано
1
2
3
4
5
    int ID = -1;
    Object scalarObj = null;
    scalarObj = sqlCommand.ExecuteScalar();
    if (scalarObj != null)
        ID = (int)scalarObj;
1
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.06.2011, 22:09  [ТС]
Это конечно немного не то, но всё же спасибо. Я имел ввиду, может мне Sql команду как-то переписать надо или какой другой метод может использовать.
0
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
11.06.2011, 22:13
Вопрос же был "как избежать исключения и вернуть -1 в случае, если значение не найдено?"
0
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.06.2011, 22:25  [ТС]
Цитата Сообщение от Nwq Посмотреть сообщение
Вопрос же был "как избежать исключения и вернуть -1 в случае, если значение не найдено?"
Ну значит я опять не правильно выразил свою мысль
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.06.2011, 09:42
Цитата Сообщение от Casper-SC Посмотреть сообщение
Я имел ввиду, может мне Sql команду как-то переписать надо или какой другой метод может использовать.
НУ как вариант можно написать функцию или процедуру в самой БД, которая будет реализовывать проверку показанную Nwq. Но как мне кажется - это лишнее
Еще вариант: чтобы запрос возвращал не скалярную велечину, а таблицу, тогда сначала проверяешь количество возвращенных строк, а затем (при ненулевом значении) выбираешь данные. Но это тоже кривой подход и кода больше будет...
0
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
12.06.2011, 10:27  [ТС]
Покажи пожалуйста как вернуть таблицу, я просто с базами начал вообще недавно работать, так как появилась необходимость. Мне скорее на будущее это надо, чем применять к этому коду.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.06.2011, 11:05
Цитата Сообщение от Casper-SC Посмотреть сообщение
Покажи пожалуйста как вернуть таблицу
пункт 2.3
1
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
12.06.2011, 11:09  [ТС]
А дык SqlDataReader возвращает таблицу . Тогда я им уже пользуюсь (ну в проекте использую в других методах). Спасибо всё равно.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.06.2011, 11:14
Цитата Сообщение от Casper-SC Посмотреть сообщение
А дык SqlDataReader возвращает таблицу
Ну да, он считывает ее построчно. Чтоб вернуть таблицу полностью, еще можно использовать TableAdapter.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2011, 11:14
Помогаю со студенческими работами здесь

Каким образом можно во внешнем запросе выбрать все переменные, которые находятся внутри функции?
Добрый день. У меня есть пакет с функцией внутри которой производятся различные действия со многими переменными. Каким образом...

Каким образом можно перевести код Паскаля в код Фортран?
Здравствуйте уважаемые программисты! Может быть банальная, но довольно сложная проблема - перевод из одного кода в другой! Как его можно...

[COBOL] Каким образом можно получить код символа?
Kukstyler, здравствуйте, каким образом в cobol можно получить код символа? Например, строка содержит "a", и необходимо узнать код...

Каким образом можно получить код ошибки принтера HP LJ 1020
Принтеры при неисправности выдают код ошибки, если есть окно индикации, то на него, если окна нет, то код ошибки выдается на один из...

Каким образом можно вычистить весь код из рабочей книги Excel?
Я имею в виду макросы.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер