Computer Wiz99 Ответов: 2

Как получить количество строк из запроса except compare tables?


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

Вот мой код:

SqlCommand com = new SqlCommand("SELECT COUNT(*) from (SELECT INST_ID, LongName FROM TableINSTE) EXCEPT (SELECT INSTE, LongName FROM AFTE WHERE FTEYR = '" + TextBoxFTEYR.Text + "' GROUP BY INSTE, LongName)", con3);

            DataTable dt = new DataTable();

            SqlDataReader sqlDataReader = com.ExecuteReader();
            

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

            GridView dataGridView4 = new GridView();
            GridView4.DataSource = dt;
            GridView4.DataBind();

            object count = com.ExecuteScalar();
            lblCount4.Text = count.ToString();


Что я упускаю?

Что я уже пробовал:

Я пробовал разные графические запросы, и ни один из них до сих пор не работает.

2 Ответов

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Рейтинг:
11

Richard Deeming

Попробуйте использовать NOT EXISTS вместо:

using (SqlCommand com = new SqlCommand("SELECT COUNT(*) FROM TableINSTE WHERE NOT EXISTS(SELECT 1 FROM AFTE WHERE AFTE.FTEYR = @FTEYR And AFTE.INSTE = TableINSTE.INST_ID And AFTE.LongName = TableINSTE.LongName)", con3))
{
    com.Parameters.AddWithValue("@FTEYR", TextBoxFTEYR.Text);
    
    object count = com.ExecuteScalar();
    lblCount4.Text = count.ToString();
}

EXISTS (Transact-SQL) | Microsoft Docs[^]