Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 08.01.2023
Сообщений: 90

Запрос без ошибок, но не работает

19.01.2025, 20:15. Показов 651. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите понять в чем дело и почему запрос не работает.
Значит есть у меня два класса реализующие такие интерфейсы.


Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
public interface IProduct
{
    string Class { get; set; }
    string Vid { get; set; }
    string Name { get; set; }
    int Kolichestvo { get; set; }
    decimal Cena { get; set; }
}
public interface IFlower: IProduct
{
    int Dlinna { get; set; }
}


Есть вот такой метод который добавляет товар в БД. Он проверяет на наличие такой же записи, а потом через CheckProductTypeForRequest_Update выясняет к какому типу относится входной параметр и выдает соответствующий SQL запрос.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public void AddProduct(IProduct tovar)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlTransaction sqlTran = connection.BeginTransaction();
        try
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.Transaction = sqlTran;
                if (CheckDuplicates(tovar) == false)
                {                            
                    command.CommandText = (Сhecker.CheckProductTypeForRequest(tovar));
                }
                else
                {
                    command.CommandText = (Сhecker.CheckProductTypeForRequest_Update(tovar));
                }
                command.ExecuteNonQuery();                        
                sqlTran.Commit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            try
            {
                sqlTran.Rollback();
            }
            catch (Exception exRollback)
            {
                MessageBox.Show(exRollback.Message);
            }
        }
        connection.Close();
 
    }
}


Метод CheckProductTypeForRequest_Update работает исправно и возвращает предыдущему методу верный запрос. Запись в БД изменяется.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static string CheckProductTypeForRequest_Update(IProduct product)
{
    if (product is Flower)
    {
        Flower tovar = (Flower)product;
        string request = $"UPDATE Product_Table SET  Kolichestvo = Kolichestvo + N'{tovar.Kolichestvo}', Cena = N'{tovar.Cena}' WHERE Class = N'{tovar.Class}' AND Vid = N'{tovar.Vid}' AND (Name = N'{tovar.Name}' AND Dlinna = N'{tovar.Dlinna}')";
 
        return request;
    }
    else
    {
        string request = $"UPDATE Product_Table SET  Kolichestvo = Kolichestvo + N'{product.Kolichestvo}', Cena = N'{product.Cena}' WHERE Class = N'{product.Class}' AND Vid = N'{product.Vid}' AND (Name = N'{product.Name}')";
        return request;
    }
}



А вот этот метод для полного редактирования записи в БД. Входные параметры(изменяемый товар и изменяющий) приходят такие какие нужно (отладчиком 10 раз уже проверил). При отладке ни каких исключений и ошибок не выскакивает и процесс завершается типа нормально. Но запись в БД не изменяется. В чем может быть причина если почти точно такой же метод работает нормально?
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public void SaveModifiedProduct(IProduct replaceable, IProduct substitute)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlTransaction sqlTran = connection.BeginTransaction();
 
        try
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.Transaction = sqlTran;
 
                if (replaceable is Flower)
                {
                    IFlower flower_replaceable = (Flower)replaceable;
                    IFlower flower_substitute = (Flower)substitute;
                    command.CommandText = ($"UPDATE Product_Table SET Class = N'{flower_substitute.Class}', Vid = N'{flower_substitute.Vid}', Name = N'{flower_substitute.Name}', Dlinna = N'{flower_substitute.Dlinna}',    Kolichestvo = N'{flower_substitute.Kolichestvo}', Cena = N'{flower_substitute.Cena}'  WHERE Class = N'{flower_replaceable.Class}' AND Vid = N'{flower_replaceable.Vid}' AND (Name = N'{flower_replaceable.Name}' AND Dlinna = N'{flower_replaceable.Dlinna}')");
                }
                else
                {
                    command.CommandText = ($"UPDATE Product_Table SET Class = N'{substitute.Class}', Vid = N'{substitute.Vid}', Name = N'{substitute.Name}',  Kolichestvo = N'{substitute.Kolichestvo}', Cena = N'{substitute.Cena}' WHERE Class = N'{replaceable.Class}' AND Vid = N'{replaceable.Vid}' AND (Name = N'{replaceable.Name}')");
                }
                sqlTran.Commit();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            try
            {
                sqlTran.Rollback();
            }
            catch (Exception exRollback)
            {
                MessageBox.Show(exRollback.Message);
            }
        }
        connection.Close();
 
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2025, 20:15
Ответы с готовыми решениями:

Почему код работает без ошибок в многопоточного режиме без синхронизации
Доброго времени суток. Решил освоить азы тестирования и написать тесты для класса Threadsafe_file на Python. Вопрос простой: почему код...

Запрос без ошибок но результат-ресурс равен FALSE
Вызываю метод function Query($QS){ $this->_pResult = mysql_query($QS, $this->Connect->_ID); Format::eh("\n\t-- ЗАПРОС QS\n" ....

Программа работает частично без ошибок
Компиляция прошла успешно, ошибок компилятор мне не показал, началось выполнение, ввел необходимые случайные данные, и на этом программа...

2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18262 / 14187 / 5366
Регистрация: 17.03.2014
Сообщений: 28,872
Записей в блоге: 1
19.01.2025, 20:19
Лучший ответ Сообщение было отмечено Diom как решение

Решение

Цитата Сообщение от Diom Посмотреть сообщение
В чем может быть причина
В отсутствии вызова метода ExecuteNonQuery.
1
2 / 2 / 0
Регистрация: 08.01.2023
Сообщений: 90
19.01.2025, 20:42  [ТС]
Слона не заметил. Видимо пора заканчивать на сегодня с учебой. OwenGlendower, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2025, 20:42
Помогаю со студенческими работами здесь

Терминал не работает, но собирается без ошибок
Всем привет! Пришлось переустановить Qt. Проект работал без проблем, никаких нареканий, но открыл после переустановки и собирается...

Как создать запрос с роллбаком в случае ошибок без использования хранимых процедур?
приветствую всех. у меня возникла необходимость создать такие запросы. цитирую слова преподавателя: реализуй управление транзакциями в...

восстановление без ошибок, пол сайта не работает
уже 3 день палю нервы с этой недо системой. проблема в следующем. 1 делаю бекап на сайте (удаленный хост) 2 в денвере...

Генеологическое древо. Программа без ошибок но работает не правильно
using System; using System.Collections.Generic; using System.Text; class Person { private string p; private int...

Без использования typedef все работает. При добавлении typedef — более 100 ошибок
Есть программа, с описанием структуры и функций, работающими с ней. Без использования typedef все работает. При добавлении typedef - более...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru