Laden...

Forenbeiträge von zerberos Ingesamt 520 Beiträge

21.09.2007 - 20:52 Uhr

danke!

21.09.2007 - 18:15 Uhr

Hallo,

ich habe ein Form1. Jetzt habe ich ein zusätzliches WindowsForm hinzugefügt (Form2.cs)

Jetzt mal ne ganz dumme Frage. Wie kann ich von Form1 das Form2 aufrufen??

20.09.2007 - 23:05 Uhr

Hallo,

ich möchte ein trainingstagebuch schreiben indem ich meine trainingsdaten verwalte. Hab mir gedacht das Access dafür am besten geeignet ist

Nun wollte ich wissen ob es vielleicht noch gute Alternativen gibt als die daten in einer Access DB zu speichern???

20.09.2007 - 11:43 Uhr

vielleicht hilft dir das hier:

OracleConnection con = new OracleConnection("User ID=test;password=test; Data Source=testdata");

string commandString = "SELECT * from tabelle1";

OracleDataAdapter DataAdapter = new OracleDataAdapter(commandString, con);
             
DataTable dt = new DataTable();
DataAdapter.Fill(dt);
            
dataGridView1.DataSource = dt;
14.09.2007 - 10:37 Uhr

ich wusste garnicht das es sowas gibt. danke für den tip! werde da mal was durcharbeiten. aber zu datenbanken im allgemeinen gibt es da doch noch nicht oder?

13.09.2007 - 11:20 Uhr

ok danke dir. bin jetzt etwas weiter.

habe versucht mir den insert befehl dynaamisch erstellen zu lassen (statisch geht ja nicht da die felder ja immer andere sein können)

bekomme jetzt aber folgende Meldung:

Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.

ich denke das problem liegt darin da die von mir erstellte tabelle in der access datenbank keinen primärschlüssel enthält

was kann ich machen?


OracleConnection con2 = new OracleConnection("User ID=test;password=test; Data Source=testdata");
            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 = "testtabelle";
            
            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();
           
            foreach(DataRow row in ds.Tables[0].Rows)
            {
                row.SetModified();
            }

            OleDbDataAdapter dadapter = new OleDbDataAdapter();
            dadapter.SelectCommand = new OleDbCommand("Select * from " + tabellenname, con);
            OleDbCommandBuilder custCB = new OleDbCommandBuilder(dadapter);
            dadapter.Update(ds);
            
                      
            con.Close();

die vorgeschlagene Funktion DbDataAdapter.InsertCommand-Eigenschaft hab ich mir angesehen. Aber wenn ich das richtig verstanden habe muss ich den update bzw insert befehl statisch festlegen. Und ich brauch ja was, was komplett dynamisch ist

12.09.2007 - 10:18 Uhr

wie setze ich den alle datensätze in der datatabel auf rowstate.added ??

hab mal versucht den Insert befehl zu erstellen

OleDbCommandBuilder incmd = new OleDbCommandBuilder();
incmd.Append("Insert into");
incmd.Append(tabellenname);
foreach (DataRow row in dt)
{
??????
}

aber komme da nicht weiter

11.09.2007 - 14:23 Uhr

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();
11.09.2007 - 12:46 Uhr

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?

11.09.2007 - 10:36 Uhr

also funktioniert noch nicht ganz.

wenn ich mir ankucke was in dem comman 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,)

bei

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();
11.09.2007 - 08:39 Uhr

ok. bin soweit durchgestiegen glaub ich.

nur mit DatenTyp.ToString() komme ich nicht klar. Was muss ich für Datentyp schreiben. das kennt der ja nicht. oder muss ich einfach nur ne variable datentyp definieren? das ist aber nicht so denke ich

danke!

10.09.2007 - 11:36 Uhr

Original von juetho

Original von zerberos
Ich will ja mit der abgefragten Tabellenstruktur die im OracleDataAdapter steht eine neue Tabelle in der Access Datenbank erstellen.
Dann ist zwangsläufig cmd.ExecuteReader() falsch, wie die einfache Übersetzung "Ausführen zum Lesen" zeigt und auch die :rtfm: erläutert.

Du musst dafür die Variante cmd.ExecuteNonQuery() verwenden. Jürgen

ok hab ich gemacht. das ändert trotzdem nichts an meinen problem. der erstellt mir in der datenbank eine leere tabelle ohne feldnamen

möchte aber das der mir eine tabelle erstellt mit den feldnamen die ich aus der oracle datenbank abfrage. also die ich dataset (oder datatable?) stehen

10.09.2007 - 10:04 Uhr

keiner?

ich denke das der update befehl falsch ist den ich verwende. Ich will ja mit der abgefragten Tabellenstruktur die im OracleDataAdapter steht eine neue Tabelle in der Access Datenbank erstellen.

Weiß keiner hier wie das geht? ich bin echt am verzweifeln gerade

07.09.2007 - 09:36 Uhr

so bin jetzt mal was weiter gekommen

so sieht mein quelltext 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();

beim update fliegt der mit folgender Meldung raus:

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

was ist falsch?

07.09.2007 - 07:08 Uhr

hab mich vielleicht etwas falsch ausgedrückt. die tabelle erstellen weiß ich wie 's geht und die connection geht uach.

nur ich weiß noch nicht wie ich die daten aus meiner datatable in meine access tabelle bekomme?

06.09.2007 - 12:48 Uhr

Hallo,

Ich rufe Daten aus einer Oracle Datenbank ab (oracledataadapter) und speicher diese in einer DataTable zwischen.

Jetzt möchte ich den Inhalt dieser DataTable in eine Access Datenbank schreiben. Die Tabelle zum reinschreiben muss allerding jedesmal neu erstellt werden aus den Angaben der DataTabel. Da hab ich ja spaltennamen und Anzahl der Spalten drinnen.

Nur habe ich leider keine Idea wie ich diese Informationen abrufe bzw wie ich damit die Tabelle in der Access Datenbank erstelle

06.09.2007 - 09:40 Uhr

also ist der dataadapter die schnellere möglichkeit daten in das datagridview zu laden?

was ist das mit dem virtuellen modus? hab ich noch nie was von gehört

06.09.2007 - 09:34 Uhr

der fehler der kommt:

invalidoperationexception wurde nicht behandelt
Ungültige Operation. Die Verbindung ist geschlossen.

was muss ich machen?

06.09.2007 - 09:01 Uhr

verwendetes Datenbanksystem: oracle

ich bin momentan dabei alles etwas zu optimieren. daher will ich auch das füllen meinen datagridviews optimieren

momentan fülle ich das so:


OracleDataAdapter DataAdapter = new OracleDataAdapter(commandString, con); 
DataTable dt = new DataTable(); 
DataAdapter.Fill(dt); 
dataGridView1.DataSource = dt; 

Da dies aber zum Teil ziemlich lange dauert, versuche ich den Prozess etwas zu optimieren. ich bin dabei auf die Idee gekommen anstatt des DataAdapter vielleicht nen DataReader zu benutzen, da so das auslesen der daten schneller gehen könnte.

Nur weiß ich jetzt nicht so recht, wie ich danach weiter vorgehen soll. Weil ich kann ja mit dem DataReader nicht ohne weiteres die DataTable füllen wie ich es bis jetzt gemacht habe oder?

So sieht das bis jetzt aus


string commandString = Txt_SQL.Text;

OracleCommand cmd = new OracleCommand();
cmd.CommandText = commandString;

con.Open();
OracleDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
dataGridView1.DataSource = dt;

Bei der Zeile OracleDataReader..... springt der aber mit ner exception raus

Was ist jetzt die einfachste möglichkeit mit dem DataReader ein dataGridView zu füllen?