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??
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???
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;
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?
Hallo,
welches buch würdet ihr nehmen um sich mit der ado.net programmierung zu beschäftigen.
oder
oder was ganz anderes?
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
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
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();
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?
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();
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!
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
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
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?
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?
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
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
der fehler der kommt:
invalidoperationexception wurde nicht behandelt
Ungültige Operation. Die Verbindung ist geschlossen.
was muss ich machen?
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?