2017-10-07 50 views
3

Je crée une base de données avec deux tables, puis j'exécute ce code, mais cela ne fait rien du tout aux tables.Les modifications de schéma ne sont pas conservées avec la méthode 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]); 
} 

Répondre

1

La méthode OleDbDataAdapter#Update est mise à jour des contenus d'une table de base de données. Il ne prend pas en charge la modification de la structure d'une table de base de données. Pour cela, vous devrez exécuter une instruction DDL (Data Definition Language) via un objet OleDbCommand:

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