Как сделать так, чтобы счетчик отображал ноль, если счетчик недоступен?
У меня есть Gridview, который показывает мне, что вводится в базу данных и когда изменяется статус данных. У меня есть код подсчета, чтобы показать мне, сколько осталось в разных точках состояния. Когда статус один статус достигает нуля, я хочу отобразить 0 в графе и по-прежнему показывать все остальные Gridviews, которые у меня есть в форме. Прямо сейчас я получаю эту ошибку:
Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Что я знаю, что это такое, но пытаюсь заставить счетчик отображать ноль, когда Gridview нечего показывать. Есть ли способ сделать этот код?
Вот мой Счетный код:
SqlCommand com2 = new SqlCommand("Select count(AutoID) from TableFIN where SUBMITTED = 'False' and FINYR = '" + TextBoxFINYR.Text + "' GROUP BY SUBMITTED, FINYR", con2); object count2 = com2.ExecuteScalar(); lblCount3.Text = count2.ToString();
Ошибка здесь:
lblCount3.Text = count2.ToString();
Что я уже пробовал:
Я пробовал утверждение If Else, но безуспешно.
A_Griffin
SELECT COUNT всегда возвращает целое число, если только нет ошибки. Проверьте подключение к SQL и базе данных.
Кроме того, это плохая идея - строить свой SQL из такой конкатенации строк-вы оставляете себя открытым для атак и ошибок ввода. Вы должны использовать параматизированный запрос.
Atlapure Ambrish
Идеальным подходом для такого сценария должен быть:
Помощью Sqlcommand.ExecuteScalar() и приведите его к int, что - то вроде ниже:
cmd. CommandText = " SELECT COUNT (*) FROM table_name";
Int32 count = (Int32) cmd.Executescalar так();
вы можете использовать Convert. Int32 для приведения.
Computer Wiz99
Спасибо. Будет ли это также работать, если я использую его в операторе If Else?
Atlapure Ambrish
Да, определенно, я не вижу никаких причин для того, чтобы это не сработало.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
using (SqlCommand com2 = new SqlCommand("Select count(AutoID) from TableFIN where SUBMITTED = 'False' and FINYR = @FINYR GROUP BY SUBMITTED, FINYR", con2)) { com2.Parameters.AddWithValue("@FINYR", TextBoxFINYR.Text); object count2 = com2.ExecuteScalar(); lblCount3.Text = Convert.ToString(count2); }
Computer Wiz99
Спасибо. Я исправил проблему с SQL-инъекцией.