Обновление набора данных с дочерним отношением и 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);
}
Ошибка: ошибки нет, но в базе данных нет строк, добавленных в таблицу "журнал".
Я не знаю, что еще я мог бы попробовать, может быть, вы мне поможете :-)
Что я уже пробовал:
Три различных варианта вставки данных см. выше.