2017-07-27 8 views
-1

Ich habe ein Programm, das Access-Datenbanken öffnen, bearbeiten, erstellen und speichern soll. Um zu sparen, kopiere ich eine leere Datenbank mit nur den Tabellen (nur um die Mühe zu vermeiden, jede Tabelle und Spalte usw. zu erstellen) und versuche, sie über die TableAdapterManager.UpdateAll-Methode mit Werten zu füllen.C# füllen eine Access-Datenbank aus einem Datensatz

string _TemplateConnectString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};"; 
_connection = new OleDbConnection(string.Format(_TemplateConnectString, dlg.FileName)); 
_connection.Open(); 

DataSet1TableAdapters.TableAdapterManager tam=new TableAdapterManager(); 
tam.Connection = _connection; 
try 
{ 
    tam.UpdateAll(dataset); 
} 
catch (System.Exception ex) 
{ 
    MessageBox.Show("Update failed"); 
} 

Es endet mit Ausnahmen, aber die Werte werden nicht in die neue Datenbank eingefügt.

Auch so weit wie ich weiß die UpdateAll Methode aktualisiert nur modifizierte Zeile, so wenn ich einige db öffnen und es fügt Zeilen, wird es nicht berücksichtigen, auch wenn nicht in der Datenbank, die ich versuche zu füllen .

ich auch versucht haben, die Datenbank mit den ADODB und ADOX Erweiterungen füllen, aber alle Lösungen, die ich mit denen, fand viele Hardcoding und keine Grüße für Hierarchie wurde, Schlüssel, etc.

Gibt es eine Möglichkeit zu zwingen alles in die neue Datenbank einfügen?

Antwort

0

Eine plumpe Lösung, aber es funktioniert. Ich iterieren die Tabellen des Datensatzes und speichern die über einen SQL-String-Generator wie folgt aus:

void SaveTable(DataTable dt) 
    { 
     string[] inserts; 
     try 
     { 
      inserts = SqlHelper.GenerateInserts(dt, null, null, null); 

      foreach (string s in inserts) 
      { 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandText = s; 
       cmd.Connection = _connection; 
       int n = cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception e) 
     { 
      SaveOk = false; 
     } 
    } 

ich die SqlHelper irgendwo auf dieser Seite gefunden, aber völlig verloren, wo sich leider. Also hier ist der Pastebin mit ihm https://pastebin.com/iCMVuYyu

0

Ist Ihre Vorlagendatenbank im Visual Studio-Projektverzeichnis? Es könnte etwas mit Visual Studio zu tun, um die Datenbank zu dem ist/Debug oder ist/Release-Ordner kopieren ...

+0

Sieht aus wie ein Kommentar zu mir, nicht wie eine Antwort. –

+0

Ja, ich habe eine Datei "emptydb.mdb" mit allen vordefinierten, aber leeren Tabellen. Ich erlaube nicht, in dieser Datei Gedanken zu speichern. Nur zu Datenbanken mit anderen Namen –

0

versuchen, den richtige Datenquelle Datenbank-Namen zu verwenden, hier ein Beispiel mit einer Excel-Datei:

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=c:\somepath\ExcelFile.xls;" & _ 
     "Extended Properties=""Excel 8.0;HDR=Yes;"";" 
+0

Aber es ist richtig. Die Datenquelle ist die Datenbank, die ich öffne. Die Verbindung öffnet sich gut mit dem offenen Status. Es ist der nächste Teil, der ein Problem hat. –

+0

Können Sie zum Beispiel nur eine einzige Beispieldaten einfügen, nicht den ganzen Datensatz? – orgen

Verwandte Themen