Как составить правильные команды вставки / обновления / удаления для обновления связанных таблиц в базе данных с исходным доступом?

Я должен использовать MS Access.

У меня есть база данных с этой структурой (не обращайте внимания на странные имена - она ​​почти не переведена для этого вопроса):

Моя программа отображает одну из этих таблиц (в WinForms). Пользователь может изменить данные в нем. Для отправки измененных данных я использую кнопку.

Здесь проблема. Если я использую OleDbCommandBuilder для генерации команд, я получаю ошибку после нажатия кнопки сохранения (если что-то было изменено в таблице).

Таким образом, если я что-то изменю в таблице выключения: DataTable "таблица" не включает DataColumn "идентификатор пациента" для этого SourceColumn "идентификатор пациента" (текст ошибки переведен, поэтому может выглядеть немного иначе).

Если я что-то изменю в таблице посещений: синтаксическая ошибка INSERT INTO. И так далее про ОБНОВЛЕНИЕ и УДАЛЕНИЕ.

Похоже, я должен составлять команды вручную. Но я не понимаю, как это сделать. MSDN пример не очень помогает.

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

В случае, если что-то не понятно без кода моей формы:

protected string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
protected OleDbConnection connection = new OleDbConnection();
protected OleDbDataAdapter adapter;
protected OleDbCommandBuilder cBuilder;

DataSet dataSet;

public Form1() {
    InitializeComponent();
    connection.ConnectionString = conStr;
    adapter = new OleDbDataAdapter("SELECT * FROM TABLE_NAME", connection);
    dataSet = new DataSet();
    cBuilder = new OleDbCommandBuilder(adapter);
    adapter.Fill(dataSet);

    connection.Open();
    adapter.UpdateCommand = cBuilder.GetUpdateCommand(true);
    adapter.InsertCommand = cBuilder.GetInsertCommand(true);
    adapter.DeleteCommand = cBuilder.GetDeleteCommand(true);
    connection.Close();
}

private void saveButton_Click(object sender, EventArgs e) {
    adapter.Update(dataSet); //this method send data to database and return error
}

Угадай, код загрузки не нужен.

1 ответ

Решение

Эта идея, вероятно, ошибка. Лучше искать какую-нибудь альтернативу для MS Access.

Другие вопросы по тегам