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

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

21.03.2011, 16:38. Показов 6313. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru