21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
1

Не верно работает if null

22.07.2020, 16:52. Показов 499. Ответов 18
Метки нет (Все метки)

Приветствую, помоги те разобраться, по какой то причине все время срабатывает else, хотя в похожей ситуации в другой функции все верно работает (сама ячейка пустая)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 string t = GetNetworkDateTime().ToString("HH"); //получаю текущий час 
 
            if (Convert.ToInt32(t) > 7 && Convert.ToInt32(t) < 23)
            {
                db.open();
                MySqlCommand command = new MySqlCommand($"SELECT `swork` FROM fullcontrol.{compName} WHERE  `date`= @date", db.get());//забираем значение ячейки
                command.Parameters.Add("@date", MySqlDbType.Date).Value = GetNetworkDateTime().ToString("dd.MM.yy");//условие по дате
                object result = command.ExecuteScalar();
                Console.WriteLine(result + "ssss"); // тест на значение , в выводе ничего нет
                MessageBox.Show(Convert.ToString(result));// тест на значение , в выводе ничего нет
                if (result == null) //если значения нет , занести текущее время
                {
                     
                    MySqlCommand command1 = new MySqlCommand($"INSERT INTO `fullcontrol`.{compName} (`swork`) VALUES (@date)", db.get());
                    command1.Parameters.Add("@date", MySqlDbType.Time).Value = GetNetworkDateTime().ToString("HH:mm:ss");
                    command1.ExecuteNonQuery();
                }
                else
                {
                    Console.WriteLine("1111");// по какой то причине все время срабатываает else
                }
                db.close();
            }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2020, 16:52
Ответы с готовыми решениями:

Не работает код: m_web1.Navigate ('gidro.htm',0,0,NULL,NULL);
Друзья помогите начинаюшему значит делаю m_web1.Navigate ('с:\gidro.htm',0,0,NULL,NULL);работает...

Input value null работает в консоли, но не работает скриптом onclick
Всем привет. На кнопку повесил простой скрипт, чтобы все ячейки делать пустыми. Алертом и логом...

Не работает NOT NULL
set sql_mode='STRICT_ALL_TABLES'; - задаю режим Создаю таблицу через PhpMyAdmin create table...

Блин, для ЧЕГО НУЖНА Функция CREATE TABLE invoice( inv_id INT AUTO_INCREMENT NOT NULL , usr_id INT NOT NULL , prod_id INT NOT NULL , quantity INT NOT
Погуглив, так и не смог толком понять. Есть тут ГУРУ по mysql Которые могут на пальцах или на...

18
502 / 300 / 95
Регистрация: 06.03.2017
Сообщений: 1,167
22.07.2020, 16:56 2
Цитата Сообщение от салома Посмотреть сообщение
if (result == null)
C#
1
if (string.IsNullOrEmpty((string)result))
1
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 16:58 3
Цитата Сообщение от салома Посмотреть сообщение
C#
1
2
string t = GetNetworkDateTime().ToString("HH"); //получаю текущий час 
if (Convert.ToInt32(t) > 7 && Convert.ToInt32(t) < 23)
Зачем конвертировать дату в строку, а потом обратно в целое, если у структуры DateTime есть свойство Hour, возвращающее час дня уже в виде целого?

Цитата Сообщение от салома Посмотреть сообщение
по какой то причине все время срабатывает else
Else срабатывает если запрос что-то вернул.
Видать, ваш запрос что-то возвращает.
0
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:03  [ТС] 4
Цитата Сообщение от kolorotur Посмотреть сообщение
Зачем конвертировать дату в строку, а потом обратно в целое, если у структуры DateTime есть свойство Hour, возвращающее час дня уже в виде целого?
поправлю, думал возврат идет не числом
Цитата Сообщение от kolorotur Посмотреть сообщение
Else срабатывает если запрос что-то вернул.
Видать, ваш запрос что-то возвращает.
как это проверить:?
у меня стоит 2 вывода запроса и везде пусто.
C#
1
2
Console.WriteLine(result + "ssss"); // тест на значение , в выводе ничего нет
                MessageBox.Show(Convert.ToString(result));// тест на значение , в выводе ничего нет
Добавлено через 2 минуты
Цитата Сообщение от Pilarentes Посмотреть сообщение
if (string.IsNullOrEmpty((string)result))
работает спасибо, хотя не очень понятно почему, ведь проверка одинаковая
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:16 5
Цитата Сообщение от салома Посмотреть сообщение
ведь проверка одинаковая
Пустая строка и отсутствие строки — разные вещи.
Но в консоли будут выглядеть одинаково.
Вы проверяете на отсутствие строки, а предложенный метод еще и на пустоту.

Цитата Сообщение от салома Посмотреть сообщение
как это проверить:?
Лучше всего ставить точку остановки и смотреть значение переменной в отладчике.
0
1826 / 1168 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
22.07.2020, 17:21 6
Цитата Сообщение от салома Посмотреть сообщение
ведь проверка одинаковая
Вообще то нет. Учитывая в запросе SELECT и судя по коду он вернул DBNull.Value, а это не тоже самое что null. Разницу и работу метода скаляр я описывал тут

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Лучше всего ставить точку остановки и смотреть значение переменной в отладчике.
DBNull.Value в отладчике не увидеть
0
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:26  [ТС] 7
Цитата Сообщение от Enifan Посмотреть сообщение
Вообще то нет. Учитывая в запросе SELECT и судя по коду он вернул DBNull.Value, а это не тоже самое что null. Разницу и работу метода скаляр я описывал тут
материал обязательно почитаю, спасибо
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:27 8
Цитата Сообщение от Enifan Посмотреть сообщение
DBNull.Value в отладчике не увидеть
Чавой это?
Не верно работает if null
0
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:27  [ТС] 9
Цитата Сообщение от kolorotur Посмотреть сообщение
Лучше всего ставить точку остановки и смотреть значение переменной в отладчике.
Цитата Сообщение от Enifan Посмотреть сообщение
DBNull.Value в отладчике не увидеть
да, в отладчике значение null, type object
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:29 10
Цитата Сообщение от салома Посмотреть сообщение
в отладчике значение null
Значит ваш запрос вернул 0 строк.
Была бы одна строка со значением NULL, то вернул бы DBNull.Value.
0
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:30  [ТС] 11
Цитата Сообщение от kolorotur Посмотреть сообщение
Значит ваш запрос вернул 0 строк.
так это самое интересное, таблица одна. Полностью чистая
в первой функции условие на null работает, в примере в этой теме нет

там даже код одинаковый, просто обращение к разным столбцам
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:33 12
Цитата Сообщение от салома Посмотреть сообщение
в первой функции условие на null работает, в примере в этой теме нет
Покажите код первой функции.

Цитата Сообщение от салома Посмотреть сообщение
там даже код одинаковый
Знаем мы эти "одинаковый"
0
1826 / 1168 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
22.07.2020, 17:33 13
Цитата Сообщение от kolorotur Посмотреть сообщение
Чавой это?
Что за функционал? У моего такого не показывает. Внутри {} всегда значения смотрел, все показывает кроме этого типа
Миниатюры
Не верно работает if null  
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:35 14
Цитата Сообщение от Enifan Посмотреть сообщение
Что за функционал?
Панельки Locals/Watch/Autos.

Debug -> Windows.
1
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:43  [ТС] 15
Цитата Сообщение от kolorotur Посмотреть сообщение
Покажите код первой функции.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
db.open();
 
            
            MySqlCommand command = new MySqlCommand($"SELECT `date` FROM fullcontrol.{compName} WHERE  `date`= @date", db.get());
            command.Parameters.Add("@date", MySqlDbType.Date).Value = GetNetworkDateTime().ToString("dd.MM.yy");
            object result = command.ExecuteScalar();
 
            if (result == null)
            {
                MySqlCommand command1 = new MySqlCommand($"INSERT INTO `fullcontrol`.{compName} (`date`) VALUES (@date)", db.get());
                command1.Parameters.Add("@date", MySqlDbType.Date).Value = GetNetworkDateTime().ToString("dd.MM.yy");                 
                command1.ExecuteNonQuery();                 
                time();
 
            }
            else
            {
                time();                
            }
 
            db.close();
Добавлено через 7 минут
забавно, вот и вылез dbnull

если заменить мой if==null на это
Цитата Сообщение от Pilarentes Посмотреть сообщение
if (string.IsNullOrEmpty((string)result))

Не удалось привести тип объекта "System.DBNull" к типу "System.String"."
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:48 16
салома, ну если первый метод у вас запускается первым, то все логично.
1. Таблица чистая.
2. В первом методе запрашивается столбец date. Поскольку таблица чистая, запрос возвращает 0 строк и результат null.
3. Условие проходит, вы добавляете в таблицу одну строку, у которой установлена только колонка date, все остальные — NULL или что вставит база по умолчанию.
4. Во втором методе запрашивается столбец swork с фильтром по дате. Строка с указанной датой в таблице есть (вставлеа в первом методе), но значение столбца равно NULL — возвращается DBNull.

В первом методе проверка на null работает, во втором уже нет.
1
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:51  [ТС] 17
Цитата Сообщение от kolorotur Посмотреть сообщение
салома, ну если первый метод у вас запускается первым, то все логично.
1. Таблица чистая.
2. В первом методе запрашивается столбец date. Поскольку таблица чистая, запрос возвращает 0 строк и результат null.
3. Условие проходит, вы добавляете в таблицу одну строку, у которой установлена только колонка date, все остальные — NULL или что вставит база по умолчанию.
4. Во втором методе запрашивается столбец swork с фильтром по дате. Строка с указанной датой в таблице есть (вставлеа в первом методе), но значение столбца равно NULL — возвращается DBNull.
В первом методе проверка на null работает, во втором уже нет.
вот оно как хитро, спасибо
буду проверять на все значит
C#
1
if (result == null || result == System.DBNull.Value)
0
Эксперт .NET
15461 / 11721 / 3079
Регистрация: 17.09.2011
Сообщений: 19,609
22.07.2020, 17:55 18
Цитата Сообщение от салома Посмотреть сообщение
C#
1
if (result == null || result == System.DBNull.Value)
Современные парни пишут так:
C#
1
if (result is null || result is DBNull)
2
21 / 19 / 5
Регистрация: 08.09.2011
Сообщений: 358
22.07.2020, 17:59  [ТС] 19
Цитата Сообщение от kolorotur Посмотреть сообщение
Современные парни пишут так:
C#
1
if (result is null || result is DBNull)

буду современным)
Еще раз всем спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2020, 17:59

Where работает не верно
оператор where не выдает результата при поиске по фамилии. в чем может быть проблема.

Не работает NULL в Visual C++!!
Помогите, пожалуйста)) В Билдере прога работает без ошибок, а вот в ViSUAL C++ ругается на NULL....

Скрипт работает не верно
Здравствуйте.Есть скрипт который по нажатию на кнопку записывает текущее время в инпут. Но...

JS код работает не верно?
Добрый день я плохо ориентируюсь в JS помогите пожалуйста доработать код, или подсказать как...

Не верно работает скрипт
 &lt;?php if(isset($_POST)) $a = $_POST; if(isset($_POST)) $b = $_POST; ...

Switch не верно работает
Здравствуйте! Столкнулся с одной неприятной штукой. Код у меня может быть немного переполненным...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.