Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
demonmov
33 / 10 / 0
Регистрация: 22.09.2010
Сообщений: 357
1

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

21.03.2011, 16:38. Просмотров 5081. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 16:38
Ответы с готовыми решениями:

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

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

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

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

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

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

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

А вот как теперь предусмотреть изменение произвольного значения в произвольной таблице.
0
nio
5975 / 3381 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.03.2011, 17:48 11
demonmov, почитй это http://msdn.microsoft.com/ru-ru/libr...ndbuilder.aspx
0
demonmov
33 / 10 / 0
Регистрация: 22.09.2010
Сообщений: 357
23.03.2011, 15:07  [ТС] 12
Использовал 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
Nukutu
177 / 103 / 12
Регистрация: 22.03.2010
Сообщений: 456
23.03.2011, 15:35 13
Цитата Сообщение от demonmov Посмотреть сообщение
Использовал OleDbCommandBuilder и выдало такую ошибку на ad.Update(dSet)
"Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей."
А селект у меня такой "Select * from basa"
И че делать, даже не знаю.
Русским языком же написано: "не возвращающей никаких сведений о столбце ключей.", что означает в данной базе не определен столбец с ключем. А поэтому работать не будет.
Необходимо в базе данных задать хоть один ключевой столбец.

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

На примере ошибки, которую тебе выдает, можешь понять, что неизвестность в структуре базы данных не позволит тебе ее просмотреть.
Имеется ввиду столбец с ключами.
1
demonmov
33 / 10 / 0
Регистрация: 22.09.2010
Сообщений: 357
23.03.2011, 17:57  [ТС] 16
На самомделе в моем случае не надо адрес сервера, логины и пароли, т.к. база локальная, представляет из себя один файл дбф или дб. Такие просмотрщики/редакторы на самом деле есть, вот я и хочу свой написать.
0
Nukutu
177 / 103 / 12
Регистрация: 22.03.2010
Сообщений: 456
23.03.2011, 19:02 17
Цитата Сообщение от demonmov Посмотреть сообщение
На самомделе в моем случае не надо адрес сервера, логины и пароли, т.к. база локальная, представляет из себя один файл дбф или дб. Такие просмотрщики/редакторы на самом деле есть, вот я и хочу свой написать.
Дай ссылку на такой просмотрщик. Если есть, мне самому интересно как он работает.
Я например, с удовольствие тебе бы подсказал как сделать, но в слепую, когда не знаешь структуру базы данных, не знаю как это реализовать.
Ведь даже в своем коде ты пишешь название "база". Значит знаешь название.
А спрашивается откуда? Если ты собираешься только смотреть есть или нет.
Может ты поставил для себя слишком умную задачу?
Если бы я смог написать просмотрщик баз данных, которому заранее не надо знать название базы, где файл, логин и пароль.
То поверь, Ассанж бы просто отдыхал. Но даже он воспользовался просто проданной ему информацией.
1
23.03.2011, 19:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2011, 19:02

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

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

Из базы в Datagridview
появился вопрос как в коде прописать путь в Datagridview чтобы можно было выводить данные из...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru