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

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

11.06.2011, 16:32. Показов 2021. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2011, 16:32
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru