简体   繁体   English

如何组合正确的插入/更新/删除命令来更新源访问数据库中的链接表?

[英]How to compose proper insert/update/delete commands to update linked tables in source access database?

I have to use MS Access. 我必须使用MS Access。

I have database with this structure (don't mind strange names - it barely translated for this question): 我有这种结构的数据库(不介意奇怪的名字 - 它几乎没有翻译为这个问题):

输入图像说明

My program display one of this tables (in WinForms). 我的程序显示其中一个表(在WinForms中)。 User can change data in it. 用户可以更改其中的数据。 To send changed data I use button. 要发送更改的数据,我使用按钮。

Here is problem. 这是问题所在。 If I use OleDbCommandBuilder to generate commands I get error after pressing save button (if something was changed in table). 如果我使用OleDbCommandBuilder生成命令,按下保存按钮后会出现错误(如果表中的内容已更改)。

So, if I change something in desease table: DataTable "table" does not include DataColumn "patient ID" for this SourceColumn "patient ID" (error text is translated so may look a bit different). 因此,如果我在desease表中更改了某些内容:DataTable“table”不包含此SourceColumn“患者ID”的DataColumn“患者ID”(错误文本已翻译,因此可能看起来有点不同)。

If I change something in visits table: syntax error INSERT INTO. 如果我在访问表中更改了某些内容:语法错误INSERT INTO。 And so on about UPDATE and DELETE. 关于UPDATE和DELETE等等。

Looks like I have to compose commands manually. 看起来我必须手动编写命令。 But I don't get how to do it. 但我不明白该怎么做。 MSDN example don't really help. MSDN示例并没有真正帮助。

So, please, help me to compose right commands for tables "visits" and "desease". 所以,请帮助我为表格“visit”和“desease”撰写正确的命令。 Or at least discribe how to compose it. 或至少说明如何撰写。

In case if something is not clear without code of my form: 如果在没有我的表格代码的情况下不清楚的话:

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
}

Guess, load code is not needed. 猜猜看,不需要加载代码。

This idea is probably mistake. 这个想法可能是错误的。 Better to look for some alternative for MS Access. 最好为MS Access寻找替代方案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM