2017-10-07 87 views
3

我創建了一個數據庫,其中包含兩個表,然後執行此代碼,但它根本沒有對錶執行任何操作。模式更改不會持續OleDbDataAdapter .Update方法

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]); 
} 

回答

1

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(); 
}