Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/91: Рейтинг темы: голосов - 91, средняя оценка - 4.76
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
.NET 4.x

Сохранить изменения dataset

07.12.2010, 10:17. Показов 19011. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой вопрос от полного новичка. Как сохранить изменения в базу данных из dataset?
Среда Visual Studio 2010.
В visual c# создаю базу данных , dataset и кидаю datagrid на форму.

При всавке datagrid на форму имеем сгенерированный код при нажатии на кнопку сохранить:

C#
1
2
3
this.Validate();
this.nameBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.personalDa taSet);
Данные отображаются, но после редактирования\добавления - в источнике никаких изменений.

Чего тут нехватает?


nameTableAdapter.Update(personalDataSet. Name) - не помогает.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2010, 10:17
Ответы с готовыми решениями:

Как сохранить изменения dataset в БД
Изменения сохраняются в dataset, а как сделать чтобы изменения сохранялись напрямую в БД? Нашел ответ на форуме, но не пойму где изменить...

Сохранить DataSet обратно в БД
Заполняю DataSet из файла Access: DBAdapter = new OleDbDataAdapter(commandText, oleConnection); DBAdapter.Fill(DBSet, "table1"); ...

Как сохранить данные из dataSet в БД?
Здравствуйте! Создал приложение с базой данных, и при сохранении: this.Validate(); ...

16
 Аватар для Terion
271 / 203 / 13
Регистрация: 18.06.2010
Сообщений: 491
07.12.2010, 11:37
не хватает
C#
1
this.personalDataSet.AcceptChanges()
после this.nameBindingSource.EndEdit();
0
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
11.12.2010, 13:43  [ТС]
не помогло.

В Visual Studio 2010 походу какие-то изменения в этом отношении.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
12.12.2010, 07:00
Все нормально должно быть, иногда косячит эта штука, я щас тож с базой работаю, у меня там на сохранении такой же коди работает, может в updateAll что-то не то стоит проверь
0
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
12.12.2010, 23:40  [ТС]
C#
1
2
3
4
this.Validate();
this.table1BindingSource.EndEdit();
database1DataSet.AcceptChanges();
this.tableAdapterManager.UpdateAll(this.database1DataSet);
Странно ,что вообще что-то менять надо. Создаю ведь пустой проект, БД с одной таблицой, dataset, DataGridView с предустановками. Кода сам не пишу и всё равно не работает.

Попробую немного уточнить ситуацию . После добавления строки и сохранения , закрываю форму, потом открываю и добавленая строка видна !
Но, если нажать кнопку сохранить проект и потом запустить приложение, то изменений уже нет.
Если смотреть состояние Sql источника, то там строка не добавляется никогда.

Чтобы это могло значить? msdn уже вдоль и поперёк перелазил, ничего так и не нашол, чтобы помогло.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 06:26
Цитата Сообщение от RealPirate Посмотреть сообщение
Попробую немного уточнить ситуацию . После добавления строки и сохранения , закрываю форму, потом открываю и добавленая строка видна !
Но, если нажать кнопку сохранить проект и потом запустить приложение, то изменений уже нет.
С формой все понятно, но что ты понимаешь под "проектом"?
Цитата Сообщение от RealPirate Посмотреть сообщение
Данные отображаются, но после редактирования\добавления - в источнике никаких изменений.
Чего тут нехватает?
Ты добавил данные в dataGridView, сохранил изменения в БД. Что еще ты хочешь увидеть? и где?

Цитата Сообщение от RealPirate Посмотреть сообщение
nameTableAdapter.Update(personalDataSet. Name) - не помогает.
Всегда только так и делаю все превосходно работает

Добавлено через 2 минуты
C#
1
2
this.nameBindingSource.EndEdit();
nameTableAdapter.Update(personalDataSet.Name);
Больше ничего....
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
13.12.2010, 07:54
Странно, но правда может быть дело в том что студия может не сразу добавлять данные в базу а по истечении некоторого времени,попробуй в этом направлении порыть
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 08:01
Цитата Сообщение от 23Alex24 Посмотреть сообщение
может быть дело в том что студия может не сразу добавлять данные в базу а по истечении некоторого времени
объясни, при чем тут студия?
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
13.12.2010, 08:18
При том что мы из студии же осуществляем подключение, она может накапливать измененные данные и только потом их разом добавлять/обновлять в базе. Но странно что после UpdateAll не получилось сразу)

А ты один раз переносил datagridview на форму или удалял ее и опять кидал туда же?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 08:31
23Alex24, я до сих пор не понимаю, что вы привязались к этой студии, пользователь должен не со студией работать, а с приложением. Какая разница, когда студия сохраняет данные? Важно как их сохраняет приложение. Зачем придумывать механизм сохранения данных в студии? Вы что каждому пользователю собрались студию ставить?
Танцы с бубном.....
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
13.12.2010, 09:14
А приложение на чем пишется? на листке ручкой чтоли? И фсе возможности реализованы не приложением вашим а средой разработки вообще то)

Добавлено через 10 минут
Попробуй удалить таблицу и всякие там BindingSource-ы, TableAdapter-ы,BindingNavigator-ы и добавить заного, и проконтролируй чтобы правильно ссылки стояли на источник данных в BindingSource
0
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
13.12.2010, 12:32  [ТС]
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Странно, но правда может быть дело в том что студия может не сразу добавлять данные в базу а по истечении некоторого времени,попробуй в этом направлении порыть
Да, но если я публикую своё приложение, тоесть имею дело уже с .exe файлом всё тоже самое остаётся.

Цитата Сообщение от nio Посмотреть сообщение
С формой все понятно, но что ты понимаешь под "проектом"?
файл => создать => проект => C# => приложение windows forms

Цитата Сообщение от nio Посмотреть сообщение
Ты добавил данные в dataGridView, сохранил изменения в БД. Что еще ты хочешь увидеть? и где?
В том, то и дело ,что изменения только в dataset.

В БД, то как раз изменений и нет. Я бы хотел нажать на таблицу БД ПКМ => показать таблицу данных
и увидеть там добавленные данные.
Но там или пусто или только те данные, что я сам вручную ,там же и вписал.

Пробую, опять всё заново, без bindingSourse, navigator. Пишу код сам:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Database1DataSet.Table1Row newRow = database1DataSet.Table1.NewTable1Row();
 
newRow.ID = int.Parse(textBox1.Text);
newRow.name = textBox2.Text;
newRow.number = int.Parse(textBox3.Text);            
 
MessageBox.Show(newRow.RowState.ToString());                   //  Detached
database1DataSet.Table1.AddTable1Row(newRow);
           
//// database1DataSet.AcceptChanges();                                 
MessageBox.Show(newRow.RowState.ToString());                   // Added
            
int rowsAffected = table1TableAdapter.Update(database1DataSet.Table1);
MessageBox.Show(newRow.RowState.ToString());                   // Unchanged
            
label4.Text = rowsAffected.ToString();
// 1 (Если включаю AcceptChanges(), то 0, но результат тот же)


Добавил сам comboBox, после нажатия кнопки добавить в нём сразу же видны изменения. Как только закрываю=> открываю форму - та же шляпа . БД всё это время как будто непричём - там остаётся всё как было - то есть пусто.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 15:36
RealPirate, попробуй полностью создать подключение вручную, создать запрос и выполнить его без всяких DataSet и адаптеров.
А по поводу твоего кода есть у меня какое-то чуство, что оно отправляет данные в какую-то другую БД, не ту, что ты смотришь. Хотелось бы взглянуть на строку подключения и запросы обновления.
0
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
14.12.2010, 12:45  [ТС]
Вроде всё нормально выглядит, но я в sql запросах не силён

SQL
1
2
3
4
5
6
7
8
9
10
11
DATA SOURCE=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;
Integrated Security=TRUE;USER Instance=TRUE
 
UPDATE [dbo].[Table1] SET [ID] = @ID, [name] = @name, [NUMBER] = @NUMBER 
WHERE (([ID] = @Original_ID) AND ((@IsNull_name = 1 AND [name] IS NULL) 
OR ([name] = @Original_name)) AND ((@IsNull_number = 1 AND [NUMBER] IS NULL)
OR ([NUMBER] = @Original_number)));
SELECT ID, name, NUMBER FROM Table1 WHERE (ID = @ID)
 
INSERT INTO [dbo].[Table1] ([ID], [name], [NUMBER]) VALUES (@ID, @name, @NUMBER);
SELECT ID, name, NUMBER FROM Table1 WHERE (ID = @ID)
И так далее. я там ничего не менял. База Данных в самом деле называется Database1.mdf и такой файл имеется в папке проекта. Список вероятных ошибок сужается?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
14.12.2010, 18:05
попробуй подключить БД к СУБД, а не использовать физический адрес. И как ранее говорил, пробуй подключение вручную.

Цитата Сообщение от RealPirate Посмотреть сообщение
Список вероятных ошибок сужается?
Сам я с 2010 студией не работал, но некоторые говорят, что слегка сыровата она, глюкает игногда.... думай сам
0
25 / 14 / 3
Регистрация: 01.12.2010
Сообщений: 69
11.07.2011, 17:52  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Спустя некоторе время решение было найдено и поясню в чём было дело для тех, кто столкнётся с проблемой не сохраняющихся данных в режиме дизайна приложения.

Настройки файла базы данных (например файл MyDatabase.sdf) содержат свойства
  • Действие при построении
  • Копировать в выходной каталог - здесь должно стоять значение: Не копировать
В случае если стоит значение: "Всегда копировать" или "Копировать если новее" база данных при новом запуске будет заменяться на новую, в которой уже не будет изменений внесённых динамически.

Правда, приходится файл базы данных копировать из папки приложения в папку Debug и Release вручную, каждый раз когда вы решите изменить структуру базы. Зато все данные которые вы внесли в базу сохранятся!!!

Да, и не удивительно, что asp.netчики удивлённо разводили руками, при описании проблемы, ведь там механизм запуска другой и подобные операции производить не надо. Вся эта ерунда относится только к WinForms WPF и т.д.
6
26 / 26 / 15
Регистрация: 20.10.2012
Сообщений: 180
15.12.2013, 16:32
RealPirate, где поменять эти настройки файла базы данных ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2013, 16:32
Помогаю со студенческими работами здесь

Сохранить измененные данные из DataGridView в DataSet
Подключил источник данных к DataGridView Название_ТаблицыBindingSource, в нем есть 4 записи. Добавил несколько новых записей. И наткнулся...

Как сохранить данные в DataSourse из DataSet'a
Суть в чем. У меня есть набор таблиц *.dbf. Я подключаюсь через OleDb к папке с таблицами(DataSourse). В самой программе у меня есть...

SQLite: в Dataset изменения есть, а в самой базе не сохраняются
имеется вот такой код : SQLiteFactory factory = (SQLiteFactory)DbProviderFactories.GetFactory("System.Data.SQLite"); ...

Как обновить dataset после изменения структуры базы данных сервере sql
Здравствуйте, пишу приложение на c#. Подключаюсь к базе данных через сервер ms sql. Допустим есть таблица rabochie с полями(Имя, Фамилия,...

Сохранить изменения в БД
у меня есть таблица , как сделать что бы при редактирование информация сохранялась??? Me.КнигаTableAdapter.Update- везде нахожу это ,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки 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. На борту пять. . .
Камера 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