Computer Wiz99 Ответов: 2

Как исправить ошибку" имя 'con76' не существует в текущем контексте"?


Привет. У меня есть ошибка, когда я устанавливаю свой флаг в своем программном коде. Я установил первый флаг и никакой ошибки но когда я устанавливаю второй флаг я получаю ошибку, "
The name 'con76' does not exist in the current context
Я не знаю, почему я получаю эту ошибку. Вот мой код:

if (AMMC_MATCHED == true)
            {
                //CALL CALCULATION FUNCTIONS

                //Calculate Base Salary Percent
                BASE_PERCENT = 0;
                CALC_BASE_PERCENT(BASE_SALARY, AAMC_MIN, AAMC_MID, AAMC_MAX);

                //Calculate Total Salary Percent
                TOTAL_PERCENT = 0;
                CALC_TOTAL_PERCENTAGE(TOTAL_SALARY, AAMC_MIN, AAMC_MID, AAMC_MAX);

                //Calculate New Salary based on Percentage passed
                NEW_BASE_SAL = 0;
                CALC_BASE_SAL(DEFAULT_PERCENTILE, AAMC_MIN, AAMC_MID, AAMC_MAX);
                NEW_TOT_SAL = NEW_BASE_SAL + SUPPLIMENT;

                //Calculate New Percentage Based on new Total Salary
                NEW_TOT_PCT = 0;
                CALC_TOTAL_PERCENTAGE2(NEW_TOT_SAL, AAMC_MIN, AAMC_MID, AAMC_MAX);

                SALARY_ADJ = NEW_BASE_SAL - BASE_SALARY;


                //UPDATE EMPLOYEE BASE DATA Table with New percentages and calculated salaries for current person

                SqlConnection con76 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["PERCENTAGE_CALC_DB"].ConnectionString);
                con76.Open();
                
                SqlCommand scmd6 = new SqlCommand("UPDATE EMPLOYEE_BASE_DATA SET CURRENT_BASE_PCT = '" + BASE_PERCENT + "', CURRENT_TOTAL_PCT = '" + TOTAL_PERCENT + "', REQUESTED_PCT = '" + DEFAULT_PERCENTILE + "', SALARY_ADJUSTMENT = '" + SALARY_ADJ + "', NEW_TOTAL_PCT = '" + NEW_TOT_PCT + "', SALARY_FOR_REQ_PCT = '" + NEW_BASE_SAL + "', X_CURRENT = '" + BASE_SALARY + "', PROPOSED_X = '" + NEW_BASE_SAL + "', Y_SUPPLEMENT = '" + SUPPLIMENT + "', Z_INCENTIVE = '" + SALARY_ADJ + "', TOTAL_COMPENSATION = '" + TOTAL_SALARY + "', CURRENT_TOTAL_COMP = '" + TOTAL_SALARY + "', MATCHED = 1 WHERE MNUMBER = '" + MNUMBER + "' AND SCENARIO = '" + TextBoxSCENARIO.Text + "'", con76);
                scmd6.ExecuteNonQuery();
                

            }
            else if (AMMC_MATCHED == false)
            {
                
                SqlCommand scmd67 = new SqlCommand("UPDATE EMPLOYEE_BASE_DATA SET MATCHED = 0 WHERE MNUMBER = '" + MNUMBER + "' AND SCENARIO = '" + TextBoxSCENARIO.Text + "'", con76);
                scmd67.ExecuteNonQuery();
                
            }


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

Я попытался установить другое соединение, и это, кажется, очистит ошибку, но мне не нужно этого делать, так как это всего лишь одно открытое соединение.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Как исправить ошибку" имя 'con76' не существует в текущем контексте"?

Вам нужно изучить, какова область действия переменной.
if () {
    // what is created here
}
else {
    // does not exist here
}

// what is created here
if () {
    // exist here
}
else {
    // and here
}

-----
SqlCommand scmd6 = new SqlCommand("UPDATE EMPLOYEE_BASE_DATA SET CURRENT_BASE_PCT = '" + BASE_PERCENT + "', CURRENT_TOTAL_PCT = '" + TOTAL_PERCENT + "', REQUESTED_PCT = '" + DEFAULT_PERCENTILE + "', SALARY_ADJUSTMENT = '" + SALARY_ADJ + "', NEW_TOTAL_PCT = '" + NEW_TOT_PCT + "', SALARY_FOR_REQ_PCT = '" + NEW_BASE_SAL + "', X_CURRENT = '" + BASE_SALARY + "', PROPOSED_X = '" + NEW_BASE_SAL + "', Y_SUPPLEMENT = '" + SUPPLIMENT + "', Z_INCENTIVE = '" + SALARY_ADJ + "', TOTAL_COMPENSATION = '" + TOTAL_SALARY + "', CURRENT_TOTAL_COMP = '" + TOTAL_SALARY + "', MATCHED = 1 WHERE MNUMBER = '" + MNUMBER + "' AND SCENARIO = '" + TextBoxSCENARIO.Text + "'", con76);

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


Рейтинг:
0

F-ES Sitecore

// define your connection outside the if

SqlConnection con76 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["PERCENTAGE_CALC_DB"].ConnectionString);

if (AMMC_MATCHED == true)
{
    // rest of code
}
else if (AMMC_MATCHED == false)
{
    // con76 is not available here too
}