c# - OleDbDataAdapter .Update 方法未保留架构更改

标签 c# ms-access ado.net oledb oledbdataadapter

我创建了一个包含两个表的数据库,然后我执行这段代码,但它对表没有任何作用。

private void CreateConstraint(DataSet dataSet, string table1, string table2, string column1,
                              string column2)
{
    string connectionString =
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\...\Database1.accdb";
    OleDbConnection connection = new OleDbConnection(connectionString);
    OleDbDataAdapter daf1 = new OleDbDataAdapter("select * from " + table1,connection);
    daf1.Fill(dataSet,table1);

    OleDbDataAdapter daf2 = new OleDbDataAdapter("select * from " + table2,connection);

    daf2.Fill(dataSet,table2);

    ForeignKeyConstraint FornKey = new ForeignKeyConstraint("ForKeyCustOrder",
        dataSet.Tables[table1].Columns[column1],dataSet.Tables[table2].Columns[column2]);

    FornKey.DeleteRule = Rule.Cascade;

    // Add the constraint, and set EnforceConstraints to true.
    dataSet.Tables[table2].Constraints.Add(FornKey);
    dataSet.EnforceConstraints = true;

    dataSet.AcceptChanges();
    daf1.Update(dataSet.Tables[table1]);
    daf2.Update(dataSet.Tables[table2]);
}

最佳答案

OleDbDataAdapter#Update 方法用于更新数据库表的内容。它不支持对数据库表的结构 进行更改。为此,您需要通过 OleDbCommand 对象执行 DDL(数据定义语言)语句:

string sql = 
        "ALTER TABLE tblChild " +
        "ADD CONSTRAINT FK_tblChild_tblParent " + 
        "    FOREIGN KEY (ParentID) " +
        "    REFERENCES tblParent (ID) " +
        "    ON DELETE CASCADE";
using (var cmd = new OleDbCommand(sql, conn))
{
    cmd.ExecuteNonQuery();
}

关于c# - OleDbDataAdapter .Update 方法未保留架构更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46622010/

相关文章:

c# - 如何序列化原始 json 字段?

C# 调用 Jupyter Notebook

c# - 如何设置 Selenium 和 ChromeDriver 以 headless 模式运行

ms-access - MS Access,数字格式

c# - ADO.Net Entity Framework 事务

c# - 使用 ADO.Net 的查询的连接超时异常

c# - 循环依赖和动态程序集加载

java - 我有选择查询问题

c# - 让 SqlDataAdapter 和 SqlCommand 混淆

sql - 单击时如何从 Column(0) 中的列表框中引用值?