VC#. Работа с базой данных из DataGridView. Select, Insert, Update, Delete. Урок 31
HTML-код
- Опубликовано: 17 фев 2020
- Поддержать проект - www.donationalerts.ru/r/bytepp
В этом уроке вы узнаете как работать с базой данных из DataGridView. Мы научимся добавлять данные через datagridview, редактировать данные через datagridview и узнаем как удалить данные из datagridview. В ходе занятия будет идти работа c MS Sql Server.
Подписывайтесь на канал, ставьте лайки, задавайте вопросы в комментариях!
Чел, храни тебя господь, как бы я без твоих видосиков курсач написала
Прям жизненно
@@user-lw6xc9go4v аналогично, сейчас пишу.
@@Sarutobi_Asuma +
Человек опередивший систему образования на 100 лет вперед. Спасибо за помощь с курсовой)
За эти полчаса я понял по БД больше, чем за весь курс и за неделю смог написать практику на 5. Спасибо
очень, очень надо продолжение )) Очень очень!!! Надеюсь тебе удастся сделать на этой неделе!!!
Большое спасибо за полезную информацию.
Спасибо тебе огромное! Все по факту и по существу. Не видать мне диплома без этого урока
Пожалуйста)) рад, что понравилось
Вообще, видео урок очень понятен, после просмотра умел сам настраивать по другим требованиям все методы, Весь проект визуально получился интуитивно понятен даже с первого взгляда. Даже не страшно что-то менять в значениях ибо почти все моменты были объяснены в ролике.
Очень хотелось бы, что-бы можно было скачать ваш проект, поэтому в следующих видео, пожалуйста добавьте их под описание видео, спасибо!
Лучший видос на эту тему!
Годнота, как раз курсач пишу)
Топ видео по теме. Очень интересный канал👍
Брат, спасибо, ты меня спас от отчисления
Это замечательно)) поздравляю 😎
Благодарю за урок. Лабораторную помог сделать
Очень полезная информация.
Простое человеческое спасибо!
Пожалуйста))
Спасибо! Лайк И Подписка! Хороших новых уроков Автору!
Спасибо) прекрасное пожелание, благодарю))
Вообще супер, долго искал толковую инструкцию
Благодарю
Спасибо. Хорошее видео.
Твой видос помог понять тему за 30 минут лучше, чем в шараге за 627385 пар.
Очень рад))
за INT_MAX пар*
Большое спасибо, мне нужно было сделать бд для отчета по производственной практике и твой ролик мне помог
Классно 👍
@@Bytepp А можете еще кое что подсказать, я хочу взять бб как приложение, открываю его на ноуте и выходит ошибка с текстом "unhandled exception has occurred in your application". Что может быть не так?
супер, то что надо!_)
Мужик - ты лучший =)
От души))
Спасибо тебе огромное!!!
Спасибо, помог
спасибо, вы меня спасли
Очень рад))
Поддерживаю, очень надо!!! И еще добавить ComboBox
А что в комбике должно быть?
@@user-im6lx5yb7e DataGridComboBoxColumn позволяет пользователям выбрать элемент из раскрывающегося списка
@@Rublev_m а, ты имеешь в виду комбик в гриде. не правильно понял))
Привет. Спасибо за видео, вижу тут многих оно спасло) я новичок, было интересно смотреть, но мало что было понятно. Надеюсь после пары просмотров освою информацию .
Посмотри этот плейлист, если новичок в базах данных Базы данных для C# программиста: ruclips.net/p/PLH3y3SWteZd1oBVuI7mIGsk5psiCb4teB
Было бы полезно соединять ролики, и, например, для кнопки "Обновить" добавить функционал обновления графика при внесении данных в базу. А то чет инфы в интернете про это вообще нету. И получается, для обновления графика надо закрыть и заново открыть приложение, тогда кнопка становится по факту бесполезной, как и кнопка "Построить график". Че его строить по кнопке, если можно сразу выдавать и будет тоже самое. А так урок классный, спасибо большое автору за его труд
Здорово! Не могли бы вы записать такой же ролик, но если бы у нас была не 1 таблица, а несколько связанных таблиц. Было бы интересно посмотреть.
Поддерживаю)) В студию топ контент))
Надеюсь автор увидит твой коммент. Нигде нет толковой инфы по связанным таблицам и добавлению данных в обе одновременно
@@user-im6lx5yb7e не нашел инфы ?
не нашел инфы ?
@@lalityray6908 не нашли ответ ?
А как же кнопка файл))) Забыли про нее. Урок классный!
Андрей, подскажите пожалуйста, как мне сделать, что бы эти функции распространялись еще и на таблицы (дата гриды) на соседних таб-панелях? У меня три таблицы в БД, каждую из которых нужно править такими способами.
Как пофиксить нажатие Enter при Update? Т.е. я внёс правку и нажимая update в бд данные не уходят, пока не нажмёшь перед этим enter.
И ещё вопрос, хочу показать из таблицы не все поля, вылетает ошибка "Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, ..."
Будет ошибка incorrect syntax near the keyword User, то просто поставьте где SELECT [User] - квадратные скобки
случайно нашел видос и он очень кстати, спасибо за работу! Хотел бы только уточнить, вы делаете обновление/удаление через 7 колонку, можете подсказать возможно ли сделать допустим через + (добавление) - (удаление) /(редактировать) добавив 3 кнопки рядом с "обновить" или это лишняя работа и проще так как у вас?
При прописывании строк:
e. Control.KeyPress -= new KeyPressEventHandler(Column_KeyPress);
textBox.KeyPress += new KeyPressEventHandler(Column_KeyPress);
Выводит 2 ошибки:
"Нет перегруженного метода для "Column_KeyPress", который соответствует делегату "KeyPressEventHandler".
"KeyEventArgs" не содержит определения "KeyChar" и не удалось найти доступный метод расширения "KeyChar", принимающий тип "KeyEventArgs" в качестве первого аргумента (возможно пропущена директива using или ссылка на сборку).
Получается что у меня "валидация" для колонки не работает из-за этого, а все остальное нормально, подскажи что делать?
Как сделать также, но чтобы работа шла с базой данных находящейся на сервере? Например localhost
Вопрос, при внесении данных в базу, обязательно нужно нажать на enter, как обойти это, чтобы без нажатия на enter, сразу сохранилось все
Где исходник кода можно посмотреть ?
Можно ли заменить AttachDbFilename (метод который получает полный путь к базе данных) на метод, который не требует полного пути?
Просто если отправлять кому-то весь проект, то ему придется собственноручно менять во всех (в моем случае 6) формах AttachDbFilename= на его полный путь к базе данных
(К примеру у меня AttachDbFilename=C:\Users\Максим\source
epos\... , у других в "загрузках" )
Спасибо! Не могли бы вы, куда нибудь оставить код этой программы?
Нет перегруженного метода для "Control.KeyPress", который соответствует делегату "KeyPressEventHandler".
у меня такой вопрос
как вывести ЭКСЕЛЬ в дата грид вьюз на С ШАРПЕ я понял
но мне еще нужно чтобы шло сравнение например из эдита с значениями такого то столбца
типа настройки:
если там во втором столбце значения таблицы соответствуют значению в эдит например в эдит я записал 200 и в экселе во втором столбце стоят 200 то все норм
если я взял и поменял значение там 3 ячейки 2 столбца то выводится либа меседжом либо там в мемо или лабел сообщение что там столбец такой строка такая не соответствуют заданным параметрам
КАК ЭТО СДЕЛАТЬ
Добрый день, застрял на функции добавления строки. Когда запускаю приложение, при вводе строки в колонке id стоит -1 и при нажатии insert появляется ошибка, как это исправить?
Все бы хорошо, почему то update не проходит
Не пойму в чем дело,когда удаляю строку появляется ошибка "database is locked",хотя когда на другой форме добавление работает(SQLite)
Большое спасибо за видео! Но возникла проблема на моменте с удалением строки. Вылезает ошибка "Ссылка на объект не указывает на экземпляр объекта". Строчка удаляется, но потом снова появляется при перезапуске. В отладчике поймала на строчке dataSet.Tables["Users"].Rows[rowIndex].Delete();
При этом Rows.Count = 4, а rowIndex выбранной строки (второй) равен 1, то есть по идее всё должно работать, но почему-то не работает. В чём может быть причина?
Такая же проблема
Добрый день! При адаптации Вашего подхода к моей задаче, на строке, аналогичной Вашей 126 (время 20:19, события формы) у меня возникает ошибка при компиляции: cs1001, требуется идентификатор. Пока не знаю как проблему победить.
Упс, очепятка, благодарю за Вашу просветительскую деятельность
ахаха. Хелпанул с курсовой шо ппц!!
Привет,можешь подсказать пожалуйста,как мне вывести в один datagridview 3 таблицы из mysql?Или как это можна зделеть другим способом?Буду очень благодарен если ответишь)!
Объясните пожалуйста почему у меня нет data grid view вообще только старый data grid , как поставил нет кор 3.1 сразу исчезло и незнаю какая из галочек отвечает за появление этого элемента вновь
Где взять исходник?!
возможно всё вот это в mvc написать?
А как сделать чтобы для сохранения таблицы при изменении ячейки в БД не надо было нажимать на Enter или кликать на ячейки других строк? Это не интуитивно, что update появляется сразу при вводе, а работает он только если нажать на любую ячейку, кроме ячеек текущей строки. Надо, чтобы update работало сразу.
У меня если нажать "Обновить" не меняя таблицу, в столбце Delete перестают появляться ссылки-кнопки.
Хороший гайд, все работает, но вот только не понял что за валидация и зачем она?
Чтоб не вводили всякую фигню)) логин же не может быть например пустой строкой и т.д.
Как организовать поиск(filter )по таблице datagreedview без базы данных???
Как-то всё очень не канонично. DataGridView может сама редактировать, вставлять, удалять записи в DataTable, для этого не нужно писать свой код. По крайней мере, если используется BindingSource в качестве посредника. Для валидации тоже есть встроенные механизмы.
А можно сделать так же, но для двух таблиц в двух разных datagridviewи что бы конфликтов не было?
У меня такой же вопрос, т.к. у меня при допустим, удалении строки всплывает ошибку, что нет ссылки на объект
А сама ошибка происходит в строчке dataSet.Tables[table_name].Rows[rowIndex].Delete();
Я пытаюсь сделать это с иной формы, все методы удаления, обновления и добавления я сделал в отдельном классе, а потом использую эти методы во всех остальных формах, и в этом случае у меня появляется ошибка, не могу решить её(
у меня проблема появилась
есть архив с этой программной? или ответь в вк
спасибо, такой вопрос как можно добавить регулярные выражения для проверки вводимых данных?
Я не пробовал, но, думаю, что можно привязать код с проверкой к событию добавления текста либо ещё к какому-нибудь, которое тебе больше подойдёт)
@@Bytepp я все таки смог добавить)
А почему нумерация id идет не по порядку после внесения изменений? Нельзя это как-то исправить?
Идентификаторы уникальные, так как вставлен primary key identity
Кто-нибудь подскажет, как исправить "программа не содержит статического метода "Main" подходящего для точки входа", все делал как в видео, переделываю 3 раз, но все ровно ничего не работает.... Помогите
20:16 А можно не создавать DataRow и вписывать туда значения для каждого столбца, потом в добавлять row в dataSet ? Вот отредачили dataGrid, из него достаём dataGridView1.DataSource, добавляем в dataSet.Tables и вызываем sqlAdapter.Update(dataSet, "Table"). Получится что-то вроде такого:
DataTable table = (DataTable)dataGridView1.DataSource;
dataSet.Tables.Clear();
dataSet.Tables.Add(table);
sqlAdapter.Update(dataSet, table.TableName);
И можно вообще не делать кнопки для добавления, изменения и удаления. Можно просто одну кнопку сделать "Сохранить", и всё
Есть вариант ещё проще:
int a = SqlDataAdapter.Update(dataSet, TB_ANKETS);
MessageBox.Show($"Обновлено строк: {a}", "Уведомление");
и не нужно писать дополнительный код для добавления\изменения\удаления
Спасибо, ты спас меня
Очень помог с ошибкой, когда отсутствовала ссылка на объект в строке
dataSet.Tables["Users"].Rows[rowIndex].Delete();
Если вы до сюда долистали, то вот ваше спасение
Добрые день, ошибка в sqlConnection не работает, как решить ?
Проверить подключение
Почему не использовался BindingSource?
потому что его нужно подключать отдельно, а как это делать другой вопрос
У меня выдает исключение "You have an error in your syntax, '[Delete] FROM users' at line 1"
Зачем Delete в []?
dataGridView не отображает таблицу, хотя делал по примеру, как быть?
Перепроверить всё)) начать с подключения к БД))
привет! нашел решение? прошел 1 год..
Я нашел незамысловатый "баг" который ломает все данные, если перед тем как изменить данные, отсортировать их по нажатию на HeaderColumn, то данные немного "поплывут" и некоторые заменятся а некоторые пропадут, берите это во внимание если у вас нужно будет работать с большим количеством данных.
Столкнулся с такой же проблемой , есть способ тут это пофиксить?
А есть видео как добавить сюда не локальную базу данных, а уже имеющуюся? Просто когда подключаю стороннюю мне выдает ошибку "ключевое слово Provider не поддерживается" и "index должен быть положительным числом"
В этом видео есть информация ruclips.net/video/yTwgAgogV-M/видео.html
@@Bytepp Provider - это для OleDbConnection а не SqlConnection
Можно ли сделать так, чтобы нумерация строк, которая находится в столбце id, автоматически становилась соответственной своему расположению. Просто при удалении к примеру 4-ой конечной строки и создании новой, номер строки будет уже не 4, а 5. А хотелось бы, чтобы было всё также 4!
Если у тебя ID уникальное и авто инкриминируемые, то они каждый раз будут новые у каждой строки
@@Bytepp Теперь понял, спасибо)
Здравствуйте
я работаю на visual studio 2012 и к сожалению данный запрос:"Select * from `department`, 'delete' AS [Delete]", db.getConnection()); у меня вызывает ошибку: you have an error in your sql syntax; check the manual that corresponds to your mysql server version for right syntax to use near ''delete' as [delete] at line 1
Может кто-нибудь подсказать как оформить запрос, чтобы ошибки синтаксиса не срабатывало? Спасибо
"Select *, 'Delete' as `Command` from department"
[delete] или [Delete] должно помочь вместо delete в запросе
'delete' AS `Delete`
привет. у меня проблема, первая колонка где должно быть id не заполняется само. что это может быть и где искать возможную ошибку?
Привет) А что в таблице происходит? Там есть id у каждой строки? Возможно в коде напутал что-то
@@Bytepp при добавлении данных, первая колонка сама не заполняется как у тебя на видео. Id только у первой колонки с индексом 0. Если ее не заполнить самому то выскакивает ошибка
@@Bytepp мне нужно где в коде идёт счётчик (или что там у тебя) присвоения id для каждой вновь добавленной строки
Все функции программы работают исправно , но после перезапуска программы данные не сохраняются в базе данных .
Проверь сохраняешь ли ты все изменения после добавления данных
Здравствуйте я всё правильно написал но не работает😢
"требуется инициализировать свойство DataAdapter.SelectCommand/Connection" вот такую ошибку выдает при попытке при пуске формыюЧТО ДЕЛАТЬ?
проверь для начала открыто ли подключение к бд и всех ли классов ты создал экземпляры
@@Bytepp состояние у бд:открытое.Канал подключения к бд тоже открыт,всепланетной выдаёт эту ощибку
Значит надо гуглить эту ошибку))
@@Bytepp всетаки получилось))проблема была в методе по загрузке данных,написал код без метода в событья и теперь при загрузке формы(в это событья) написал код по загрузке данныхю.Все работает кроме операции Update.Переписал код два раза и ничего не помогает.В последний столбец при изменения значение отоброжается ,,,Update"" но при наэжатие значение меняется на ту при который она добавилась изначально.В чем проблема может быть?
Все нашел XD и все работает.Спасибо огромное))
Блин пишет индекс вне диапазоне значения(
Потому что отсчёт начинается с 0,1,2...
Не добавляется новый столбец с Delete. Пишет, что выхожу за границы. Что делать?
Проверь внимательно туда-ли ты его добавляешь и также проверь счётчики в цикле
@@Bytepp Все так как на видео, единственное, что я привязал SQL Server, где у меня лежит БД, к проекту. С индексами все норм, т.к. если я поставлю индекс столбца, который у меня есть, то он переделывает текст в тех ячейках в linklabel
Как исправили?
Как исправили?
В можно весь код из видео 🤣
А как работать с несколькими таблицами? У меня 9 таблиц и между ними нужно как-то переключаться, можно ли это реализовать?
Можно. Только сначала сформулировать, что именно нужно делать. Если нужно обрабатывать связанные таблицы, то можно использовать представления. Хотя всё это вчерашний день, с более-менее большой базой будет тупить
@@viteralex Нет, база не большая. Это чисто для лабораторной в универе. Так же нужно просто инсерт, апдейт, делит и джоины
@@user-fq1gh2em6w и в чём проблема? Какая база? Если от Microsoft, так там кода почти не надо, все можно в мастерах делать: запросы писать, настраивать отображение, проверять результат
@@viteralex phpmyadmin MySQL. Ещё такая проблемка, что я не могу по способу в видео подключить бд, она вообще не хочет коннектиться
@@user-fq1gh2em6w если студия 2017,2019 то там есть полная интеграция со студией
Автор помоги срочно
почему бы не сделать на WPF Core с использованием Entity Framework Core, количество кода уменьшается в разы, если надо могу скинуть ссылку, просто по не знанию сначала захотел как у тебя, но потом увидел количество кода и это ооочень грязно...
если посмотришь профайлером, какие дебильные запросы формирует ентети фреймворк, а заодно и сколько лишней работы требует маппинг, то расхочется упоминать EF в суе
@@shananboiara Во первых если хочешь писать оптимизированный код пиши на с
Во вторых чтобы работать с большими проектами нужно чтобы код был минимальный
В третьих я думал что он такие запросы создаёт, чтобы нельзя было sql инъекции сделать
В четвертых это фреймворк который будут развивать и поддерживать
@@mishashins Во первых под .net действительно нельзя писать оптимизированный код (даже на IL), однако и тут не стоит без особой на то причины наваливать сверху еще тяжеловесного говна
Во вторых все замечательно раскидывается по модулям и компактно вызывается; не уверен, что кто-то из подписчиков работает в мелкософт и прям над реально большими проектами
В третьих как ты можешь быть уверен, что запрос защищен от инъекций, если его написали за тебя; я, возможно, параною, но sql действительно легко учится
В четвертых ну сопсна и пусть развивается, не надо забывать, что в основе его ORM и ориентирован он под "удобство" для программиста и определенные паттерны разработки, в ущерб всему остальному
Каждый свои инструменты выбирает, если тебе удобно закручивать гайку "универсальным закручивателем чегобытонибыло 3000", работающем от сети 380В , а не гаечным ключом, то почему бы и нет
@@shananboiara ты прав, но ошибаешься что мало проектов больших, .нет специализируется на больших проектах с глубоко проработанной логикой, и та кроссплатформа, которая щас разрабатывается позволяет писать оптимизированный по памяти код, но просто многие об этих фишках не знают
паходу меня не отчислят теперь
А ни у кого не было: "Ссылка на объект не указывает на экземпляр объекта.", если было, то как исправили?
А на каком экземпляре класса это у тебя?
@@Bytepp происходит это в "ReloadData()", но проблема ещё и в том, что сама по себе таблица не хочет отображаться в "dataGridView", это может быть связанно с тем, что БД находится на хостинге? (Когда работал по вашим урокам с "listView", то никаких проблем не было. Данные о БД записаны и в той программе и в этой в App.config)
@@MyKlimm, да, вполне может быть с бд связано, а null reference может возникать из-за ошибки создания подключения. Проверь подключение и строку подключения. Подсоединись к бд на хостинге через обозреватель серверов и скопируй строку подключения. Вставь её в конфиг, в общем, туда, где строка подключения идёт.
@@Bytepp Делал, но эффект тот же, "dataGridView" пустой и никаких ошибок, ровно до того момента, пока я не нажму на кнопку "Update" и только тогда вылетает ошибка: "Ссылка на объект не указывает на экземпляр объекта.". Сейчас попробую создать локальную БД, посмотрю что будет.
И с локальной не хочет
Как То Странно Работает update, на раз 10, или вообще нет, в чем может быть дело
Возможно проблемы с подключением. Погугли
@@Bytepp удалять строки и добавлять я могу, не пойму что именно с апдейтом, ваш код один в один, за кадром правок не было?
@@puser-yh9lv7kl1h, неа, не было. Я думаю ты где-то забываешь обновить бд скорее всего
@@puser-yh9lv7kl1h, попробуй удалить все try catch, если они есть, вдруг где-то ошибка
@@Bytepp Вообщем мне надо стать на другую строку и нажать Апдейт, тогда сохраняет
дуд, а если таблиц несколько, то что тогда? Хах
Палец вверх, но юзеринтерфейс трешевый. Не говоря у же про кучу дублей кода...
Косноязычие убивает желание смотреть.
слишком сложно и нет подробного объяснения (
Посмотрите ролики по этой теме которые он до этого снимал
Не работает, не удается неявно преобразовать тип System.Windows.Forms.DataGridViewRow в System.Windows.Forms.DataGridView боже какой же тупейший язык этот C# в windowsForms, просто ненавижу его