Computer Wiz99 Ответов: 1

Как сделать так, чтобы счетчик отображал ноль, если счетчик недоступен?


У меня есть 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-инъекцией.

1 Ответов

Рейтинг:
7

Computer Wiz99

Я решил свою проблему. Вот код, который я использовал.

DataTable dt = new DataTable();

            SqlDataReader sqlDataReader = com3.ExecuteReader();


            dt.Load(sqlDataReader);
            sqlDataReader.Close();

            GridView dataGridView4 = new GridView();
            GridView4.DataSource = dt;
            GridView4.DataBind();
            lblCount4.Text = GridView4.Rows.Count.ToString();