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

Я должен использовать 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
}

Думаю, загрузочный код не нужен.


person InfernumDeus    schedule 07.07.2015    source источник
comment
так в чем проблема/ошибка с кодом, который вы показываете в конце?   -  person hoijui    schedule 07.07.2015
comment
@hoijui, в принципе, все в порядке. Мне просто нужно вручную составить adapter.UpdateCommand, adapter.InsertCommand и adapter.DeleteCommand. Я думал, что без этого кода что-то может быть неясным.   -  person InfernumDeus    schedule 07.07.2015


Ответы (1)


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

person InfernumDeus    schedule 07.07.2015