Обновление набора данных с дочерним отношением и dataadapter не работает
Привет,
У меня возникла проблема при попытке вставить сгенерированные данные в базу данных. (сервер MS SQL)
У меня есть база данных, содержащая только две таблицы: "Test", которая является родительской таблицей, содержащей некоторые заголовочные данные, и "LOG", которая является дочерней таблицей, содержащей "ID_Test" и некоторые значения журнала.
У меня есть автоматически сгенерированный набор данных из Visual Studio под названием "HSR_DataSet" и результирующие табличные адаптеры "TESTTableAdapter" и "LOGTableAdapter", а также TableAdapterManager.
В любом случае-главное препятствие в HSR_DataSet Ист установить "связь - а также ограничения внешнего ключа" (перевод), UpdateRule: Каскад, свойства deleterule: Каскад, прием/RejectionRule: Каскад.
В конфигурации TabeAdapters я поставил галочку напротив опции "обновить Datatable".
В моем коде я создаю 1-2 новые строки для таблицы "тест" и n строк для таблицы "журнал". Я никогда не заполняю набор данных с помощью sql.
Чтобы записать заголовочные данные и зарегистрированные значения в базу данных, я пробовал разные версии, которые приводили к разным ошибкам:
Версия 1:
try { HSR_DataSetTableAdapters.TableAdapterManager MGR = new HSR_DataSetTableAdapters.TableAdapterManager(); MGR.TESTTableAdapter = new HSR_DataSetTableAdapters.TESTTableAdapter(); MGR.LOGTableAdapter = new HSR_DataSetTableAdapters.LOGTableAdapter(); MGR.UpdateAll(HS_DATA); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Ошибка: "нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей."
Версия 2:
try { HSR_DataSetTableAdapters.TESTTableAdapter TA_TEST = new HSR_DataSetTableAdapters.TESTTableAdapter(); HSR_DataSetTableAdapters.LOGTableAdapter TA_LOG = new HSR_DataSetTableAdapters.LOGTableAdapter(); TA_TEST.Update(HS_DATA.TEST); TA_LOG.Update(HS_DATA.LOG); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Ошибка: ошибки нет, но в базе данных нет строк, добавленных в таблицу "журнал".
Версия 3:
using (SqlConnection CONN = new SqlConnection(Properties.Settings.Default.HSR_ConnStr)) { SqlDataAdapter DA_TEST = new SqlDataAdapter("SELECT * FROM [dbo].[TEST];", CONN); SqlDataAdapter DA_LOG = new SqlDataAdapter("SELECT * FROM [dbo].[LOG]", CONN); DA_TEST.Fill(HS_DATA.TEST); DA_LOG.Fill(HS_DATA.LOG); SqlCommandBuilder B_TEST = new SqlCommandBuilder(DA_TEST); SqlCommandBuilder B_LOG = new SqlCommandBuilder(DA_LOG); B_TEST.GetInsertCommand(); B_LOG.GetInsertCommand(); CONN.Open(); DA_TEST.Update(HS_DATA.TEST); DA_LOG.Update(HS_DATA.LOG); CONN.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Ошибка: ошибки нет, но в базе данных нет строк, добавленных в таблицу "журнал".
Я не знаю, что еще я мог бы попробовать, может быть, вы мне поможете :-)
Что я уже пробовал:
Три различных варианта вставки данных см. выше.