2017-10-07 2 views
3

Ich erstelle eine Datenbank mit zwei Tabellen, dann führe ich diesen Code, aber es tut nichts zu den Tabellen überhaupt.Schema Änderungen nicht beibehalten mit OleDbDataAdapter .Update Methode

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

Antwort

1

Die OleDbDataAdapter#Update Methode ist für die Aktualisierung der Inhalte einer Datenbanktabelle. Es unterstützt keine Änderungen an der Struktur einer Datenbanktabelle. Dazu müssen Sie eine DDL-Anweisung (Data Definition Language) über ein OleDbCommand Objekt ausführen:

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