Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 06.12.2020
Сообщений: 40

Неправильная работа БД

04.07.2021, 23:07. Показов 2660. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Проблема такова:

Есть вот такой код:
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
43
44
45
46
47
 private void InitializeDataGridView()
        {
List<string> data = new List<string>()
                    { 
                     ... 
                     }
string query = "";
 
                if (dataGridView1.RowCount == 0)
                {
                    for (int i = 0; i < data.Count; i++)
                    {
                        query += $"INSERT BalanceIndicators VALUES ('{data[i]}', '', '', '', ''); ";
                    }
                    InsertData(query);
                }
}
 
 private static DataTable InsertData(string sql)
        {
            string connectionString = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=OyuRoi;Data Source=(local)\\SQLEXPRESS";
            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = connectionString;
                DataTable table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                try
                {
                    cn.Open();
                    SqlCommand command = new SqlCommand(sql, cn);
                    int i = command.ExecuteNonQuery();
                    SqlDataAdapter adapter = new SqlDataAdapter();
                    adapter.SelectCommand = command;
                    DataTable dt = new DataTable();
                    adapter.Fill(table);
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    cn.Close();
                }
                return table;
            }
        }
Беда в том, что Insert выполняется в разнобой (проверял значение переменной query, - оно правильное, как мне нужно, но на выходе при SELECT запросе в субд результат другой), помимо этого коллекция "data" содержит в себе 25 элементов, а в БД на выходе получается 50, то есть при селекте идут либо все элементы по порядку но по два раза каждый (например)
Code
1
2
3
4
Привет
Привет
Мир
Мир
либо беспорядочно совсем.
Помогите, пожалуйста
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2021, 23:07
Ответы с готовыми решениями:

Неправильная работа свойств кнопок
Ребят, прописал я смену картинок при нажатии и наведении кнопок. Все вроде работает хорошо, но при открытии файла, что бы функции...

Неправильная работа метода DrawPoligon
Нужно нарисовать 6-ти угольную звездочку. Её я рисую по 2 6-ти угольникам. Но у меня возникли проблемы при вырисовывание самой звезды....

Неправильная работа обработчика событий кнопки в Форме
Здравствуйте, у меня возникла проблема с событием кнопки. Надо, чтобы кнопка проверяла, активирована ли радиокнопка. В моём случае их...

12
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.07.2021, 10:34
Довольно странный код: вы при каждой(!) инициализации элемента Grid на форме выполняете записывание в БД некого листа. Учитывая что БД после завершения работы приложения как бы никуда не девается, то кажись это будет плодить данные при каждом запуске.

Далее
command.ExecuteNonQuery(); -- выполняете вставку ваших данных
adapter.Fill(table); -- еще раз пинаете тот же sql с insert, т.к. вы задаете адаптеру одну и ту же команду.
0
0 / 0 / 0
Регистрация: 06.12.2020
Сообщений: 40
05.07.2021, 12:03  [ТС]
Я ламер, видимо.
Задача стоит такая: при первом запуске приложения происходит INSERT заданной коллекции, затем при последующих запусках данный INSERT выполняться более не должен.
Проблему с двойным заполнением вы уже решили, посоветуйте, пожалуйста, как сделать грамотнее остальное
0
Эксперт .NET
 Аватар для Usaga
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,993
05.07.2021, 12:21
AviacionnyUser, не надо так делать. Приложение должно уже с инициализированной базой работать.

Но если уж на то пошло, то ваше приложение может просто проверить наличие данных в базе. SELECT'ы же вы умеете делать?
0
0 / 0 / 0
Регистрация: 06.12.2020
Сообщений: 40
05.07.2021, 14:23  [ТС]
Спасибо. Я всё понял.

Добавлено через 1 час 9 минут
Кстати, проблема с неупорядоченным инсертом не решена. command.ExecuteNonQuery() был вырезан, инсерт происходит 1 раз, но неупорядоченно. Я создал MessageBox который выдает мне значение query после цикла. Там показан запрос. SQL запрос построен правильно, но в конечном итоге заполняется таблица в бд в разнобой.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
05.07.2021, 15:36
AviacionnyUser, для того, чтобы получать данные во время запроса в нужном порядке используется команда ORDER BY
0
Эксперт .NET
 Аватар для Usaga
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,993
05.07.2021, 15:58
AviacionnyUser, что значит «неупорядоченный insert»? В СУБД строки хранятся в неопределенном порядке. Если вам нужно получать строки в определенном порядке, то вы явно СУБД это говорите используя оператор order by.
0
 Аватар для Andrey-MSK
3316 / 2203 / 387
Регистрация: 14.08.2018
Сообщений: 7,410
Записей в блоге: 4
06.07.2021, 16:19
AviacionnyUser,
C#
1
string connectionString = "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=OyuRoi;Data Source=(local)\\SQLEXPRESS";
Да уж..... Такого я еще не видел
Если уж так хочется в коде строку подключения делать, то есть SqlConnectionStringBuilder.
А вообще ее лучше всего хранить в App.config.
0
0 / 0 / 0
Регистрация: 06.12.2020
Сообщений: 40
06.07.2021, 16:24  [ТС]
В том порядке, в котором данные были заполнены, я имею в виду. Как в таком случае мне ORDER BY поможет?
0
 Аватар для Andrey-MSK
3316 / 2203 / 387
Регистрация: 14.08.2018
Сообщений: 7,410
Записей в блоге: 4
06.07.2021, 16:29
Цитата Сообщение от AviacionnyUser Посмотреть сообщение
Как в таком случае мне ORDER BY поможет?
ORDER BY работает только для SELECT.
Все данные в таблицах БД хранятся неупорядоченно и не важно в каком порядке их записывали в таблицу, вот ORDER BY и позволяет SELECT вывести данные в том порядке, в котором вам надо.
0
0 / 0 / 0
Регистрация: 06.12.2020
Сообщений: 40
06.07.2021, 16:33  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Да уж..... Такого я еще не видел
Если уж так хочется в коде строку подключения делать, то есть SqlConnectionStringBuilder.
А вообще ее лучше всего хранить в App.config.
Лол, строка подключения скопирована с MSDN, ссылку на который вы мне и кидаете, просто с другой статьи, какая разница вообще?

Скопирована под чистую, без попыток редактирования. В данную секунду мне это абсолютно неважно. Рефакторить буду тогда, когда цели добьюсь.

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
ORDER BY работает только для SELECT.
Все данные в таблицах БД хранятся неупорядоченно и не важно в каком порядке их записывали в таблицу, вот ORDER BY и позволяет SELECT вывести данные в том порядке, в котором вам надо.
Я знаю что такое ORDER BY, я понимаю, что вопросы исходящие от меня тупые и глупые, потому что я в ступоре, это же ведь со всеми бывает, но совсем меня за дурачка держать не надо я спрашиваю лишь как мне написать ORDER BY так, чтобы SELECT запрос выдал мне таблицу в таком порядке в каком она была заполнена?
0
 Аватар для Andrey-MSK
3316 / 2203 / 387
Регистрация: 14.08.2018
Сообщений: 7,410
Записей в блоге: 4
06.07.2021, 17:28
Лучший ответ Сообщение было отмечено AviacionnyUser как решение

Решение

Цитата Сообщение от AviacionnyUser Посмотреть сообщение
в таком порядке в каком она была заполнена
ORDER BY по ID (который IDENTITY), выведет записи в порядке возрастания или убывания.
0
Эксперт .NET
 Аватар для Usaga
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,993
07.07.2021, 06:16
Цитата Сообщение от AviacionnyUser Посмотреть сообщение
чтобы SELECT запрос выдал мне таблицу в таком порядке в каком она была заполнена?
SELECT выведет в том порядке, в каком получится или в каком укажете. А в каком порядке таблица была заполнена - неопределено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2021, 06:16
Помогаю со студенческими работами здесь

Неправильная работа в Windows 10
Доброго времени суток! Имеется небольшая программа написанная на C#, которая делает расчеты сохраняет их в файл и печатает. Программа в...

Неправильная работа random.next()
Есть класс PersonClass отдельным файлом и есть массив Persons экземпляров этого класса в моей форме. При создании экземпляра класса...

Неправильная работа хранимой процедуры
День добрый. Сложилась у меня такая ситуация: В БД (MS SQL) есть следующая ХП: CREATE procedure (@path varchar, @id_file int) as...

Неправильная работа Environment.CurrentDirectory
В приложении редко выбрасывает ошибку &quot;Нет доступа к файлу....&quot; По пути: C:\Programm Files(x86)\Microsoft Visual...

Неправильная работа клиент серверного приложения
Нашел в msdn исходники простых клиента и сервера, скомпилил в качестве консольных приложений - все работает, решил немного переделать для...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru