2013-11-09 7 views
1

Я создал служебную локальную базу данных с помощью Visual Studio 2013 Express Edition. Строка подключения, набор данных и TableAdapter были добавлены автоматически.TableAdapter Вставка не сохраняющихся данных

При нажатии кнопки я пытаюсь вставить некоторые данные, вызвав TableAdapter.Insert Поскольку у меня уже есть dataatource dataGridView, привязанный к набору данных, поэтому я сразу вижу, что данные были вставлены в таблицу правильно на время работы, но когда я закрываю приложение, фактический DB dosn't не содержит данных. Поэтому данные фактически не вставлены в БД.

Согласно http://msdn.microsoft.com/en-us/library/ms233812%28v=vs.110%29.aspx

С вставкой, вы должны только вставки вызова, пока я звоню Update и AcceptChanges на столе, в целях безопасности, а я попробовал первый способ, показанный в ссылке (т.е. создания строки и добавления он к набору данных, а затем вызывает обновление), но, похоже, данные вообще не вставляются в БД.

Наконец, код вставки, выстр является DataSet и та является TableAdapter

private void AddBtn_Click(object sender, EventArgs e) 
{ 
    ta.Insert("foo", "bar", 2, "zing", "tada"); 
    ta.Fill(rds.reminders); 
    rds.reminders.AcceptChanges(); 
    ta.Update(rds.reminders); 
} 
+0

Похоже, вы вставляете запись затем перезаписать его с помощью вызова Fill (Didnt адаптеры используется в течение длительного времени, хотя). Работает ли она, когда прокомментирована вторая строка? – LINQ2Vodka

+0

Это не перезаписывает данные, скорее, если я прокомментирую Fill, я даже не вижу эффекта на время выполнения в dataGridView. поэтому он не работает, когда его комментируют. – Omni

+0

Если вы выполняете Insert, а затем AcceptChanges, он * будет * вставлять новую запись в базу данных (поскольку определен InsertCommand). Вероятно, GridView не отражал изменений, их нужно обновлять или что-то еще. – LINQ2Vodka

ответ

2

Оказалось, что, как я использую VS скомпилированного приложения каждый раз, когда база данных мдф была быть перезаписаны, следовательно, изменения, которые я сделал, были полностью стерты,

Возможное решение может быть один из следующих

1) Измените ConnectionString, чтобы указать базу данных, которая находится в папке Debug, которая обыкновение быть перезаписаны каждый раз при компиляции и запуска приложения

2) вы можете просто позволить ConnectionString быть, как это и просто проверить его через отдельные компиляторы ler.

Я смог понять это из-за следующей ссылки stackoverflow, я внезапно провалился через 2 дня.

Database changes do not persist after ObjectContext.SaveChanges() is called

0

ClearBeforeFill недвижимости
http://msdn.microsoft.com/en-us/library/bz9tthwx.aspx

«По умолчанию каждый раз при выполнении запроса, чтобы заполнить TableAdapter's данные очищаются, и только результаты запроса загружаются в таблицу. "

+0

Настройка ta.ClearBeforeFill = false; перед установкой, имеет тот же эффект, ничего не изменилось. Хотя я прочитал ссылку, которую вы опубликовали, мне нужно установить ее на false – Omni

+0

Затем проверьте реальные данные базы данных. – LINQ2Vodka

+0

Как я уже упоминал в своем вопросе, реальные данные базы данных остаются неизменными, этот код выполняется по щелчку кнопки, и результат - только время выполнения, т. Е.Вставляемые данные можно увидеть во время выполнения, но он не сохраняется, или, скорее, он не привязан к базе данных по «некоторым» причинам. – Omni

Смежные вопросы