PZero1992 Ответов: 1

Обновление набора данных с дочерним отношением и 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);
}


Ошибка: ошибки нет, но в базе данных нет строк, добавленных в таблицу "журнал".


Я не знаю, что еще я мог бы попробовать, может быть, вы мне поможете :-)

Что я уже пробовал:

Три различных варианта вставки данных см. выше.

1 Ответов

Рейтинг:
1

Matt14159

Разве это не самое неприятное, когда вы находите старый пост с точно такой же проблемой, как и у вас, и никаких решений. PZero1992 если вы все еще здесь, Помните ли вы, как вы это исправили?