Zum Inhalt springen

C# daten in access db schreiben


zerberos

Empfohlene Beiträge

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

sql statments sind doch egal die sind richtig

sehen so aus: Select * from tabelle1

die abfrage der daten aus der oracle Datenbank funktioniert auch einwandfrei.

Die lade ich ja in den DataAdapter. Da habe ich ja dann die Daten + die Struktur drinnen stehen.

Jetzt kommt das Problem. Die Access Datenbank ist festgelegt. Nur jetzt muss ich in dieser Access Datenbank eine neue Tabelle erstellen mit der Struktur die im OracleDataAdapter festgelegt ist und dann halt auch mit den Daten füllen. Und da weiß ich nicht wie das geht. Kann gut sein das der update befehl da totaler mist ist. Nur wie mache ich das? bin echt am verzweifeln...

Link zu diesem Kommentar
Auf anderen Seiten teilen

@grueni

ja die Tabelle test gibt es. die erstelle ich ja mit:

//Tabelle in Access erstellen

string tabellenname = "test";

string tabelle = "CREATE TABLE "+ tabellenname;


OleDbCommand cmd = new OleDbCommand(tabelle, con);

con.Open();

OleDbDataReader dr = cmd.ExecuteReader();


die ist halt nur noch komplett leer. Die Struktur mmöchte ich erstellen. nur weiß nicht wie

@realgun

ja tabellennamen sind gleich!

Link zu diesem Kommentar
Auf anderen Seiten teilen

neuer status:

bin was weiter

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

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

1. lies die referenz.

z.b. OleDbDataAdapter-Klasse (System.Data.OleDb)

2. versuche OLEDB zu verstehen.

3. poste *vernünftige* fehlermeldungen und nicht

Das klappt aber irgendwie nicht...

OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand, connection);

selectCommand heisst selectCommand, weil hier für ein Update im OleDbDataAdapter zuerst ein SELECT erfolgen muss - sonst würde der DataAdapter ja niemals daten bekommen.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also folgende Sachen sind mir auf Anhieb aufgefallen:

1. Du machst ein Fill auf ein Dataset und auf ein DataTable, das Dataset kannst du weglassen, du hast die Daten doch bereits geladen.

2. Das Update wird auch wenn die Struktur in Access vorhanden ist nicht funktionieren, der RowState der DataRows in der geladenen Tabelle ist unchanged und daher wird die Row ignoriert.

3. Um die korrekten Datentyp-Bezeichnungen für die Datenbank zu bekommen gibt es für den SQL Server eine Klasse SqlDbType. Ob so etwas für Access existiert weiß ich nicht, wenn nicht müsstest du die selber schreiben.

4. Das mit dem Create ist etwas zu einfach, wenn du die komplette Struktur anlegen willst hast du viel zu tun. Du könntest die Struktur der DataTable analysieren (durch die Coloum Collection laufen), musst aber auch die Einschränkungen der Datenbank kopieren. Wenn die Quelle z.B. varchar(5) war, enthält das Dataset nach dem Fill trotzdem nur einen string-Datentyp, du kannst das Dataset also vergessen um die Tabellenstruktur zu kopieren.

Im Prinzip musst du rausfinden wie du bei Oracle die Tabellendefintionen per SQL abrufen kannst. Das Ergebnis muss du auswerten und daraus ein Create-Statement für Access generieren, dabei aber die Datentypen anpassen und Einschränkungen wie PrimaryKeys usw. berücksichtigen.

:old

Ich würde glatt sagen der Ansatz, hierfür ein Programm zu schreiben ist falsch. Oracle enthält auch ein ETL-Tool mit dem du die Daten bestimmt automatisch in die Access-DB pumpen kannst.

Die Frage ist auch: Wozu willst du das überhaupt machen? Wenn du nur die Daten abgreifen und speichern willst kannst du doch auch die WriteXml Methode des Dataset verwenden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...