Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357

Изменение базы через DataGridView

21.03.2011, 16:38. Показов 6331. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил написать обычный просмотрщик/редактор *.dbf,*.db файлов, изменение значения ячейки через DataGridView. Но ругается на обработчике событий CellEndEdit, пишет "Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками". Вот код, вроде делал по примеру, что не так, подскажите, пожалуйста.

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
 public partial class Form1 : Form
    {
DataSet dSet;
OleDbConnection cn;
OleDbDataAdapter ad;
string strSQL = "Select * from basa";
string con = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\; Extended Properties=DBASE IV";
public Form1()
{
    InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
cn = new OleDbConnection(con);
cn.Open();
ad = new OleDbDataAdapter(strSQL, cn);
dSet = new DataSet();
ad.Fill(dSet);
dataGridView1.DataSource = dSet.Tables[0];
cn.Close();
}
 
 
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    ad.Update((DataTable)dataGridView1.DataSource);
}
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2011, 16:38
Ответы с готовыми решениями:

Изменение данных в БД через DataGridView
Доброго дня, коллеги! Держался до последнего, но так и не смог найти ответа на интересующий вопрос: Имеется приложение в C#, которое...

Изменение таблицы MS SQL через datagridview
Здравствуйте. Создал небольшую программку, вот она: Кнопки управления вверху формы работают, новые записи добавляются, выделенные...

Изменение данных БД через DataTable, DataGridView
Считываю информацию с БД так: public DataTable GetManipulation(string login) { var db = new...

16
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
21.03.2011, 21:16
demonmov, ты прописал адаптеру запрос как получить данные из БД
Цитата Сообщение от demonmov Посмотреть сообщение
string strSQL = "Select * from basa";
... но нигде не указал запрос на обновление (вставку и удаление).
Почитай это
1
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
22.03.2011, 10:20  [ТС]
Я так понял, указывать запрос на обновление надо, если програмно по заданной команде изменяешь таблицу и на перед знаешь эту таблицу, я правильно думаю? А в моем случае неизвестно что именно будет изменено в таблице и что это будет за таблица, как быть?
0
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
22.03.2011, 10:51
Цитата Сообщение от demonmov Посмотреть сообщение
Я так понял, указывать запрос на обновление надо, если програмно по заданной команде изменяешь таблицу и на перед знаешь эту таблицу, я правильно думаю? А в моем случае неизвестно что именно будет изменено в таблице и что это будет за таблица, как быть?
На момент апдейта программа уже знает структуру таблицы и что обновлять.
Поэтому придется динамически создавать запросы на обновление.
В любом случае запросы на обновление нужны, так как программа не сможет догадаться что ей делать.
0
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
22.03.2011, 10:56  [ТС]
Так вот мне ж интересно, как можно на будущее создать запрос, не зная с какой таблицей придется работать?
0
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
22.03.2011, 12:35
Цитата Сообщение от demonmov Посмотреть сообщение
Так вот мне ж интересно, как можно на будущее создать запрос, не зная с какой таблицей придется работать?
Вы не поняли. Перед вызовом апдейт, надо создать запросы на обновление и добавить в датаадаптер.
Как их создать? Вы уже знает после считывания с базы данных структуру таблицы. Этого достаточно чтобы между селект и апдейт создать запросы на обновление.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.03.2011, 13:25
Цитата Сообщение от demonmov Посмотреть сообщение
Так вот мне ж интересно, как можно на будущее создать запрос, не зная с какой таблицей придется работать?
Если ты не знаешь, с какой таблицей тебе работать, значит неправильно определена модель. Следует сесть и обстоятельно подумать, что и как должно работать
0
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
22.03.2011, 13:47  [ТС]
Ну вот например программа просмотрщик/редактор дбфок - нажимаю на кнопку, выбираю нужный файл и в DataGridView он сразу отображается и тут же можно отредактировать значение нужной ячейки и в файле эти значения должны сохраниться. Я ж наперед не знаю структуру файла, который буду открывать. Как быть?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.03.2011, 14:11
Цитата Сообщение от demonmov Посмотреть сообщение
Я ж наперед не знаю структуру файла, который буду открывать. Как быть?
А как ты к нему Select писать будешь, если структуру не знаешь?
0
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
22.03.2011, 17:43  [ТС]
Кстати, селект к неизвестной таблице написать не проблема, я например так делал

openFileDialog1.ShowDialog();
string strSQL = "Select * from "+openFileDialog1.FileName;
string con = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Path.GetDirectoryName(openFileDialog1.Fi leName) + "; Extended Properties=DBASE IV";

А вот как теперь предусмотреть изменение произвольного значения в произвольной таблице.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.03.2011, 17:48
demonmov, почитй это http://msdn.microsoft.com/ru-r... ilder.aspx
0
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
23.03.2011, 15:07  [ТС]
Использовал OleDbCommandBuilder и выдало такую ошибку на ad.Update(dSet)
"Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей."
А селект у меня такой "Select * from basa"
И че делать, даже не знаю.

Код всей программы.
Тык
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
    public partial class Form1 : Form
    {
DataSet dSet;
OleDbConnection cn;
OleDbDataAdapter ad;
OleDbCommandBuilder cb; 
string strSQL = "Select * from basa";
string con = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\; Extended Properties=DBASE IV";
public Form1()
{
    
    InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
cn = new OleDbConnection(con);
cn.Open();
ad = new OleDbDataAdapter(strSQL, cn);
cb = new OleDbCommandBuilder(ad);
dSet = new DataSet();
ad.Fill(dSet,"basa");
dataGridView1.DataSource = dSet.Tables[0];
cn.Close();
}
 
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{   
   cn.Open();    
    cb.GetUpdateCommand();
    ad.Update(dSet, "basa");
    cn.Close();   
}
}


Добавлено через 20 часов 30 минут
Самое интересное, погуглил, и нашел много тем с ошибкой "Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей." и никто в них так ничего и не подсказал. Может у кого-то есть пример кода где через datagridview вносятся изменения и потом записываются в базу?
0
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
23.03.2011, 15:35
Цитата Сообщение от demonmov Посмотреть сообщение
Использовал OleDbCommandBuilder и выдало такую ошибку на ad.Update(dSet)
"Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей."
А селект у меня такой "Select * from basa"
И че делать, даже не знаю.
Русским языком же написано: "не возвращающей никаких сведений о столбце ключей.", что означает в данной базе не определен столбец с ключем. А поэтому работать не будет.
Необходимо в базе данных задать хоть один ключевой столбец.

Вообще не понятно, для чего ты мучаешься с проблемой, которую сам же создаешь.
Такой способ подключения к базе данных и работу с ней могу оправдать только тем, что база чужая и надо своровать информацию с нее.
0
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
23.03.2011, 15:57  [ТС]
Нет же, просто хочу написать редактор\просмотрищик дбф и дб файлов.
0
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
23.03.2011, 17:16
Цитата Сообщение от demonmov Посмотреть сообщение
Нет же, просто хочу написать редактор\просмотрищик дбф и дб файлов.
ОК. Кому нужен такой просмотрщик?
Если ты не знаешь адрес сервера базы данных и название экземпляра базы данных, если ты не знаешь название конкретной базы данных, логин и пароль к экземпляру базы данных, то ты не сможешь в любом случае подключиться к базе данных.
Но если ты все это знаешь, то тебе не трудно посмотреть в базе данных структуру базы данных и ее таблиц.
А если ты будешь знать структуру базы данных и таблиц, то тебе не надо просмотрщик.
Ты уже знаешь.
Можно сделать просмотрщик к известной базе данных, чтобы например, как-то своими визуальными еффектами показывать структуру и прочие атрибуты базы данных.
Но, опять же, это будет проще сделать через подключение к известной структуре.

На примере ошибки, которую тебе выдает, можешь понять, что неизвестность в структуре базы данных не позволит тебе ее просмотреть.
Имеется ввиду столбец с ключами.
1
 Аватар для demonmov
34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
23.03.2011, 17:57  [ТС]
На самомделе в моем случае не надо адрес сервера, логины и пароли, т.к. база локальная, представляет из себя один файл дбф или дб. Такие просмотрщики/редакторы на самом деле есть, вот я и хочу свой написать.
0
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
23.03.2011, 19:02
Цитата Сообщение от demonmov Посмотреть сообщение
На самомделе в моем случае не надо адрес сервера, логины и пароли, т.к. база локальная, представляет из себя один файл дбф или дб. Такие просмотрщики/редакторы на самом деле есть, вот я и хочу свой написать.
Дай ссылку на такой просмотрщик. Если есть, мне самому интересно как он работает.
Я например, с удовольствие тебе бы подсказал как сделать, но в слепую, когда не знаешь структуру базы данных, не знаю как это реализовать.
Ведь даже в своем коде ты пишешь название "база". Значит знаешь название.
А спрашивается откуда? Если ты собираешься только смотреть есть или нет.
Может ты поставил для себя слишком умную задачу?
Если бы я смог написать просмотрщик баз данных, которому заранее не надо знать название базы, где файл, логин и пароль.
То поверь, Ассанж бы просто отдыхал. Но даже он воспользовался просто проданной ему информацией.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2011, 19:02
Помогаю со студенческими работами здесь

Как сохранить изменение бд через datagridview
Всем привет! Проблема такая, что я знаю, как сохранить изменения через datagridview, если он содержит данные определенной таблицы. У меня...

Удаление строки из базы данных через DataGridView
Почему-то не получается удалить данные из базы . Выдает ошибку Есть класс, в котором набор функций, которые обращаются к базе данных. Вот...

Обновление MySQL базы через datagridView, нарушение параллелизма
Иммется подключение к БД mysql, с помощью этой кнопки получаю результаты. Все ок. DataTable dt; MySqlDataAdapter...

Вывод данных в DataGridView из зашифрованной базы Access через TableAdapter
Добрый день. Помогите пожалуйста советом. Подключаю запароленную базу Access (.accdb) как указано на MSDN:...

Изменение базы при изменении ячейки DataGridView
Подскажите ,пожалуйста, как, при внесении изменений в ячейку DataGridView отобразить эти изменения в таблице базы, которая выбрана в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru