Лучший отвечающий
Обновление базы данных через datagridview

Вопрос
-
private SQLiteDataAdapter adapter; DataTable dt = new DataTable();
private void ControlSpares_Load(object sender, EventArgs e) { AvailableSpare(Mark,Model,dataGridView1); }
public void AvailableSpare(string mark, string Model, DataGridView dgv) { var sql = string.Format("SELECT [id], [Название], [Сторона], [Особенность], [Цена] FROM [AvailableSpares] Where (Mark='{0}') and (Model='{1}');", mark, Model); using (var connect = new SQLiteConnection(Con)) { if (connect.State == ConnectionState.Closed) { connect.Open(); } var command = new SQLiteCommand(sql, connect); adapter = new SQLiteDataAdapter(command); adapter.Fill(dt); } dgv.DataSource= dt; }
Хочу сделать обновление через:
private void CONTCARsafe_Click(object sender, EventArgs e) { adapter.Update(dt); }
но выходит ошибка при нажатии: Доступ к ликвидированному объекту невозможен.17 февраля 2013 г. 11:02
Ответы
-
В функции AvailableSpare вы используете using для создания SQLiteConnection при выходе из функции данный объект уничтожается а при обновлении вы пытаете его использовать снова, поэтому и возникает ошибка, попробуйте переместить SQLiteConnection в переменную класса
- Предложено в качестве ответа Varlamov Oleg 17 февраля 2013 г. 14:17
- Помечено в качестве ответа Abolmasov Dmitry 19 февраля 2013 г. 14:24
17 февраля 2013 г. 13:59 -
Для этого у адаптера есть свойства для команд на обновление, удаление и вставку, вам надо их создать, посмотрите на класс SQLiteCommandBuilder
- Помечено в качестве ответа Abolmasov Dmitry 19 февраля 2013 г. 14:24
17 февраля 2013 г. 16:04 -
Комманда создается правильно, попробуйте раскоментировать обновление бд и поместить его после создания комманды на обновление21 февраля 2013 г. 10:14
Все ответы
-
В функции AvailableSpare вы используете using для создания SQLiteConnection при выходе из функции данный объект уничтожается а при обновлении вы пытаете его использовать снова, поэтому и возникает ошибка, попробуйте переместить SQLiteConnection в переменную класса
- Предложено в качестве ответа Varlamov Oleg 17 февраля 2013 г. 14:17
- Помечено в качестве ответа Abolmasov Dmitry 19 февраля 2013 г. 14:24
17 февраля 2013 г. 13:59 -
теперь :Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками.
а вот что к нему присвоить надо(UpdateCommand), чтоб произошли все изменения которые были в датагридвиью
17 февраля 2013 г. 14:45 -
Для этого у адаптера есть свойства для команд на обновление, удаление и вставку, вам надо их создать, посмотрите на класс SQLiteCommandBuilder
- Помечено в качестве ответа Abolmasov Dmitry 19 февраля 2013 г. 14:24
17 февраля 2013 г. 16:04 -
Привет. Пожалуйста, не забывайте отмечать ответы, решающие вашу проблему. Спасибо.
Для связи [mail]
19 февраля 2013 г. 14:24 -
Пока не выходит.
private
SQLiteCommandBuildersqlitecom=
new
SQLiteCommandBuilder(adapter);
;
sqlitecom.GetUpdateCommand();
ничего не пролисходит
21 февраля 2013 г. 8:55 -
метод GetUpdateCommand возврашает объект типа SQLiteCommand вам надо присвоить обноименному свойству адаптера
adapter.UpdateCommand = sqlitecom.GetUpdateCommand();
21 февраля 2013 г. 9:12 -
Сделал, так же нуль реакции
21 февраля 2013 г. 9:53 -
какое значение у UpdateCommand под бедагером?21 февраля 2013 г. 9:55
-
21 февраля 2013 г. 10:09
-
Комманда создается правильно, попробуйте раскоментировать обновление бд и поместить его после создания комманды на обновление21 февраля 2013 г. 10:14
-
Комманда создается правильно, попробуйте раскоментировать обновление бд и поместить его после создания комманды на обновление
Вы мой кумир, заработало. так просто оказалось.21 февраля 2013 г. 11:18 -
Не всегда так просто бывает, но рад что удалось вам помочь с вашей проблемой21 февраля 2013 г. 11:22
-
Сейчас работаю с MySQL так же требуется обновить базу данных после некоторых изменений. воспользовался способом который подсказали тут, но вылетает ошибка: Требуется инициализировать свойство DataAdapter.SelectCommand.
хотя данные в ней и так записаны:
26 февраля 2013 г. 7:48 -
А на каком методе падет это исключение? Точно на Fill методе?
Попробуйте абстрагировать весь этот код в отдельном проекте, для облегчения поиска ошибки. Если ошибка повторится, то лучше создать новую тему с приведенным ошибочным кодом.
Спасибо
Для связи [mail]
26 февраля 2013 г. 9:22 -
насколько я вижу по скрину подключение к бд обьявляется в одном методе а при выходе из него уничтожается а вот адаптер остается, попробуйте исправить и что после этого будет26 февраля 2013 г. 9:35
-
А на каком методе падет это исключение? Точно на Fill методе?
Попробуйте абстрагировать весь этот код в отдельном проекте, для облегчения поиска ошибки. Если ошибка повторится, то лучше создать новую тему с приведенным ошибочным кодом.
Спасибо
Для связи [mail]
_adapter.UpdateCommand = _sqlitecom.GetUpdateCommand(); _adapter.Update(dt);
26 февраля 2013 г. 9:51 -
насколько я вижу по скрину подключение к бд обьявляется в одном методе а при выходе из него уничтожается а вот адаптер остается, попробуйте исправить и что после этого будет
исправил, тоже самое26 февраля 2013 г. 9:52 -
исправил дело обычным запросом:
var ssql = string.Format(@"update aktive_produkte set Ebay='1' where ID='{0}';", dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString()); using (var con = new MySqlConnection(conn)) { if (con.State == ConnectionState.Closed) { con.Open(); } using (var sqlComand = con.CreateCommand()) { sqlComand.CommandText = ssql; sqlComand.ExecuteNonQuery(); } con.Close(); }
проблема было скорей всего в том, что тип колонки в таблице был tinyint(как булевский тип) а в датагридвию колонка отображалась как чекбоксы, но для апгрейда в запросе должен был присутствовать не "True" или "False" а 0 или 126 февраля 2013 г. 11:05