запись в Msql

  • Автор темы Niceday
  • Дата начала
N

Niceday

#1
Сделал форму, добавил DataGridView, ну он понятно что сам добавил productBindingSource, productTableAdapter, добавил кнопку в форме, а теперь вопрос как при нажатии этой кнопки записать в MSQL измененную таблицу, в мсдн смотрел самплы не помогли по data saving, а голова сегодня далеко от состояния думать :rolleyes:
PS: пишу это на c#
 
N

Niceday

#2
Код:
try
{
this.Validate();
this.productBindingSource.EndEdit();
this.productTableAdapter.Update(this.MainBD.product);
MessageBox.Show("Update successful");
}
catch (System.Exception ex)
{
MessageBox.Show("Update failed");
}
так он выходи в Exception, а если убрать трай и кетч то ошибка:
Update requires a valid UpdateCommand when passed DataRow collection with modified rows.
 
N

Niceday

#3
Вот это и не понятно, почему:
UpdateCommand неправильная когда передает DataRow с измененными строками
Чтобы решать эту проблему, удостоверьтесь, что DataAdapter имеет правильный UpdateCommand

Заливка DataGriView при создании требует тоже самое но работает.
this.productTableAdapter.Fill(this.MainBD.product);
 
P

Pasha

#4
Для: Niceday
this.productTableAdapter.Fill(this.MainBD.product); использует SelectCommand, потому и работает.

проверь что у твоего productTableAdapter свойство UpdateCommand определено.
 
N

Niceday

#5
Походу не определено, а как и где его определить?)
по подсказке понял что можно:
1) написать вручную
2) используя CommandBuilder для написания во время выполнения
3) используя Data tools в дизайнере
тока что-то найти не могу ничего
 
N

NikSoft

#6
Для: Niceday
Вот тебе пример:
Код:
static private DataSet CreateCommandAndUpdate(string connectionString, string queryString)
{
DataSet dataSet = new DataSet();

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

adapter.Fill(dataSet);

// Code to modify data in the DataSet here.

adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(dataSet);
}
return dataSet;
}
 
N

Niceday

#7
а в queryString что тогда передавать?
"SELECT * FROM [product]"?
 
N

NikSoft

#8
а в queryString что тогда передавать? "SELECT * FROM [product]"?
Передавай те поля из [product], что тебе нужны для работы
Если тебе нужны все поля, то делай SELECT * FROM [product]
 
N

Niceday

#9
всеравно не получается
Код:
private void button1_Click(object sender, EventArgs e)
{
try
{
this.Validate();
this.productBindingSource.EndEdit();
//this.productTableAdapter.UpdateCommand = builder.GetUpdateCommand();
this.productTableAdapter.Update(this.TESTDataSet.product);
MessageBox.Show("Update successful");
}
catch (System.Exception ex)
{
MessageBox.Show("Update failed");
}
}
без создания не работало, а теперь проблемма с созданием (если раскоментить): пишет, что
'layer_list.IS07TESTDataSetTableAdapters.layerTableAdapter' does not contain a definition for 'UpdateCommand'
и
The name 'builder' does not exist in the current context

в чем моя ошибка?
 
N

Niceday

#11
а есть разница между TableAdapter и DataAdapter? просто я использую первое, а в мсдн все про 2ое было когда начинал это делать, может в этом основная проблемма?
 
N

Niceday

#12
сам разобрался:
-открываем в солюшен эксплорере датасет
-там находим нужную таблицу
-правой кнопкой по заголовку, configure
-жмем далее, далее, готово
и вот у нас апдейт описан, ну и не только он
 
N

Niceday

#13
родилися еще пара вопросов про DataGridView:
если мы подрубили к нему TableAdapter и уже в программе кликнули на клетку, то получаем private void dataGridView1_SelectionChanged(object sender, EventArgs e)
1) а как ему послать что-то подобное если на пример мне по сообщению от таймера надо просто выбирать определенный элемент, например когда запускается таймер, то нулевой и пошли по очереди по одному
2) можно ли у DataGridView сделать его скролл бар слева а не справа?
 
N

Niceday

#14
ну или вопрос: есть DataGridView и надо проверить его табл адаптер на наличие определенного элемента (например с id_shop == 6 в MSQL) и если есть таковой то выбрать его как текущий DataRow

и еще 1 вопрос по сортировке надо отсортировать dataGridView, по столбцу ид магазина, т.к. при записи они иногда в начало таблицы пишутся и номера получаются не по порядку
dataGridView1.Sort(shop_idDataGridViewTextBoxColumn, ...);
вопрос собственно что сунуть во 2ой параметр