In Access Datenbank schreiben



  • Hallo,

    ich habe Daten die ich aus einer oracle datenbank auslese. Diese möchte ich nun in eine Access db schreiben.

    mein code sieht so aus:

    // Connections
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db.mdb");
    OracleConnection con2 = new OracleConnection("User ID=test;password=test; Data Source=test");
    
    //Tabelle in Access erstellen
    string tabellenname = "test";
    string tabelle = "CREATE TABLE "+ tabellenname;
    
    OleDbCommand cmd = new OleDbCommand(tabelle, con);
    con.Open();
    OleDbDataReader dr = cmd.ExecuteReader();
    
    //Oracle auslesen
    string commandString = Txt_SQL.Text;
    OracleDataAdapter DataAdapter = new OracleDataAdapter(commandString, con2);
    DataTable dt = new DataTable();
    DataAdapter.Fill(dt);
    DataSet ds = new DataSet();
    DataAdapter.Fill(ds);
    
    //Access db füllen
    string sql2 = "SELECT * from " + tabellenname;
    OleDbDataAdapter dadapter = new OleDbDataAdapter(sql2,con);
    dadapter.Update(ds, tabellenname); 
    
    dr.Close();
    con.Close();
    

    nur bekomme ich momentan folgende Fehlermeldung:

    Aktualisieren: TableMapping['test'] oder DataTable 'test' kann nicht gefunden werden.



  • bin etwas weiter. hab mir mit dem string builder versucht den command string zusammenzubauen. funktioniert auch fast

    wenn ich mir ankucke was in dem command cmd steht. da steht folgendes drinnen:

    CREATE TABLE test_tbl( System.String tbl_wert_1, System.String tbl_wert_2, System.String tbl_wert_3, System.Decimal tbl_wert_4, System.Decimal tbl_wert_4,)

    beim

    Code:

    cmd.ExecuteNonQuery();
    

    fliegt der dann mit folgender Meldung raus:

    Syntaxfehler in Felddefinition.

    mein ganzer code sieht so aus:

    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db.mdb");
    
                string tabellenname = "testtabelle";
    
                OracleConnection con2 = new OracleConnection("User ID=test;password=test; Data Source=test");
                string commandString = Txt_SQL.Text;
                OracleDataAdapter DataAdapter = new OracleDataAdapter(commandString, con2);
                DataTable dt = new DataTable();
                DataAdapter.Fill(dt);
    
                StringBuilder sb = new StringBuilder();
                sb.Append("CREATE TABLE ");
                sb.Append(tabellenname);
                sb.Append("(");
                foreach (DataColumn field in dt.Columns)
                {
                    sb.AppendFormat("  {0} {1},", field.DataType.ToString(), field.ColumnName);
                }
                sb.Append(")");
                OleDbCommand cmd = new OleDbCommand(sb.ToString(), con);
                con.Open();
                cmd.ExecuteNonQuery();
    
                con.Close();
    


  • wert_4,)
    

    Ein Komma zu viel.



  • jo, das ist immer beim letzten feldtyp. wie kann ich den das komma beim letzten datensatz entfernen lassen?



  • string createbefehl = sb.Replace(",)", ")").ToString();

    so hab ich jetzt das Problem mit dem letzten komma gelöst.

    Aber wie ich das System.String umsetze hab ich noch keine ahnung. Ich könnte das auch alles mit replace ersetzen. Nur dann muss ich ja für jeden möglichen typ ein replace schreiben.

    Gibt es da ne besser lösung?



  • ok hab es erstmal geschafft mir eine tabelle mit der struktur zu erstellen

    kann mir einer sagen wie ich meine Daten da jetzt reinbekomme. Hab das mit Update versucht. Das klappt aber irgendwie nicht...

    mein momentaner code:

    OracleConnection con2 = new OracleConnection("User ID=test;password=test; Data Source=test");
                string commandString = Txt_SQL.Text;
                OracleDataAdapter DataAdapter = new OracleDataAdapter(commandString, con2);
                DataTable dt = new DataTable();
                DataAdapter.Fill(dt);
                DataSet ds = new DataSet();
                DataAdapter.Fill(ds);
    
                OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db.mdb");
                string tabellenname = "test_table";
                OleDbDataAdapter dadapter = new OleDbDataAdapter("Insert into "+tabellenname,con);
    
                StringBuilder sb = new StringBuilder();
                sb.Append("CREATE TABLE ");
                sb.Append(tabellenname);
                sb.Append("(");
                foreach (DataColumn field in dt.Columns)
                {
                    sb.AppendFormat("  {0} {1},", field.ColumnName, field.DataType.ToString());
                }
                sb.Append(")");
                sb.Replace(",)", ")");
                sb.Replace("System.", "");
    
                OleDbCommand cmd = new OleDbCommand(sb.ToString(), con);                     
                con.Open();
                cmd.ExecuteNonQuery();
    
                dadapter.Update(ds, tabellenname);
    
                con.Close();
    

Anmelden zum Antworten