Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Datenbank zu viel Spalten für Update
beate007 - Mi 20.08.08 07:51
Titel: Datenbank zu viel Spalten für Update
Hallo,
ich suche nun schon Stunden nach einer Lösung für mein Problem finde aber keins.
Ich möchte gern ein Update auf meine Datenbank machen, es funktioniert allerdings die "Update"-Methode nicht, weil meine Datenbank über 40 Spalten hat.
Kann mir vielleicht irgendwer weiterhelfen. Wäre auch über Codebeispiele sehr,sehr dankbar.
lothi - Mi 20.08.08 08:42
Hallo beate
Mach doch ein Update und dann für den Rest Insert.
Du hast doch sicher eine Id.
Beim Update schichst du die ID und ein paar Spalten in die Datenbank. Dann machst du eine Insert Abfrage mit weiteren Spalten mit dem Kriterum der vorher erstellten ID.
Gruss Lothi
beate007 - Mi 20.08.08 10:45
Hallo,
Die Datenbank hat keine ID und sonst nichts eindeutiges.
Ich weiß, dass es eine extrem schlecht angelegte Datenbank ist, aber ich hab sie nicht gemacht, muss aber mit ihr arbeiten!
Hast du vielleicht noch andere Vorschläge?
lothi - Mi 20.08.08 12:09
Naja so als fantasieloser Bastler hätte ich da noch eine Idee in dem du im SQL den Befehl LAST() brauchst. So wird das Insert an den letzten Eintrag durchgeführt.
beate007 - Mi 20.08.08 13:35
nochmals danke
aber nach langer sucherei geht es anscheinend wenn man statt einer odbcConnection eine OleDbConnection macht.
Kann mir vielleich wer diesen Connection string auf einen OleDbConnection-String umbauen? Ich schaffs irgendwie nicht so wirklich.
C#-Quelltext
1: 2:
| cn = new OdbcConnection("Driver={Microsoft Access Driver (*.mdb)};" + "DBQ=" + path + ";UID=;PWD=;"); |
Dankeschön
Moderiert von
Tino: CS-Tags hinzugefügt.
beate007 - Mi 20.08.08 13:38
OK habs schon geht so:
C#-Quelltext
1:
| cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + path); |
Moderiert von
Tino: C#-Tags hinzugefügt
lothi - Mi 20.08.08 13:44
Und mit OleDB geht's jetzt?
beate007 - Mi 20.08.08 14:01
weiß ich leider noch nicht
irgendwas geht jetzt mit dem reader wieder nicht.
Beim Durchlaufen des Reader bekomm ich diese Fehlermeldung:
An unhandled exception of type 'System.InvalidCastException' occurred in system.data.dll
Additional information: The data value could not be converted for reasons other than sign mismatch or data overflow. For example, the data was corrupted in the data store but the row was still retrievable.
beate007 - Do 21.08.08 08:23
Danke erst mal
Hab das Problem jetzt gelöst aber das mit dem OleDb geht eh trotzdem nicht.
habs jetzt folgendermaßen probiert:
wenn man auf den Open button klickt öffnet sich die Datenbank.
Hier mein Code (beim open-button):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| msg = "SELECT * " + "FROM ApplSettings_Apod " + "WHERE ProbeID = " + name + " AND ApplicationID = " + comboBoxApplication.SelectedItem.ToString(); dt2 = new DataTable(); ap2 = new OleDbDataAdapter(msg,cn); ap2.Fill(dt2); dataGrid1.DataSource = dt2; |
dann gibt es da noch einen update-Button; wenn man jetzt direkt im Datagrid änderungen vornimmt und auf den update-button klickt soll sich die datenbank ändern - tut sie aber nicht
Hier mein Code (beim update-Button):
C#-Quelltext
1: 2: 3: 4: 5:
| foreach (DataRow row in dt2.Rows) { ap2.UpdateCommand = new OleDbCommand("UPDATE ApplSettings_Apod",cn); dt2.AcceptChanges(); } |
Hast du eine Ahnung was da falsch sein kann?
vielen dank schon mal jetzt!
lg
Moderiert von
Kha: C#-Tags hinzugefügt
beate007 - Do 21.08.08 10:54
Soweit wie beim Beispiel war ich schon
Aber der update-Befehl funktioniert nicht bei mehr als 40 spalten das ist mein problem
lothi - Do 21.08.08 11:59
Ja und jetzt sind wir wieder am Anfang.
Du musst das Update aufteilen in kleine Häppchen.
Wird denn im Grid die ganze Zeile geändert?
Schaufelst du die ganze Tabelle zurück oder nur die geänderte Zeile?
So wie du gesagt hast kannst du die DS in der Tabelle nicht eindeutig erkennen also musst du alle DAten aktualisieren.
zb
Update tblt
SET( Spalten1,...,Spalte20)
VAlUES(Werte)
Dann
Update tblt
SET( Spalten21,...,Spalte40)
VAlUES(Werte)
Der User muss natürlich eine gewisse Gedult aufbringen bis das ganze Aktualisiert ist.
Du sagst es ist eine Accestabelle? Auf die hast du keinen Einfluss? Aber du hast zugriff auf die Tabelle? Wenn ja füge frech eine AutoWert-Spalte hinzu und du bist alle Probleme los. Kein Mensch stört diese Spalte kein Mensch sieht diese Spalte und nichts aendert sich an der ganzen Sachen.
Gruss Lothi
beate007 - Do 21.08.08 12:24
habe nur gehofft dass es irgendwie schneller geht und dass ich nicht die spaltennamen jedes mal eintippsen muss weil sich die ständig ändern in der db
aber danke auf jedn fall
lothi - Do 21.08.08 12:31
Also jetzt muss ich doch mal fragen.
Ihr habt eine Access Tabelle mit mehr als 40 Spalten ohne eine möglichkeit den DS zu erkennen und bei der noch dauernd die Namen der Spalten wechseln?
Ich weiss nicht, aber das kann doch nicht gut gehen.
Gruss Lothi;der extrem erstaunt ist das es so etwas gibt.
beate007 - Do 21.08.08 13:00
bin auch schon gespannt ob das gut geht - aber an der db kann ich leider nicht rumpfuschn
lothi - Do 21.08.08 13:34
Naja rumpfuschen nicht. Nur für dich geradebiegen.
Da brauchst nicht gespannt zu sein das geht in die Hosen. (oder Rock?) :lol:
Ist das Privat oder Geschäft?
Gruss Lothi
beate007 - Fr 22.08.08 10:59
hallo,
sorry dass ich schon wieder stör (oder nerv).
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| hab das mitn update jetzt gemacht - schaut so aus:
foreach(DataRow row in dt2.Rows) { string rowSt = row.RowState.ToString(); if(rowSt.Equals("Modified")) { string id = row[0].ToString(); string id2 = row[1].ToString();
string msg = "UPDATE ApplSettings_SRI " + "SET " + "ProbeID =" + id + "," + "ApplicationID =" + id2; ap2.UpdateCommand = new OleDbCommand(msg,cn); DataTable changes = dt2.GetChanges(); ap2.Update(changes); } } |
wenn ich jetzt z.B.: in der ersten Zeile die ProbeID auf 22 ändere und in der zweiten zeile auf 45 werden sämtliche Zeilen auf die ProbeID 45 upgedatet.
Ich erkenn das Problem an meinem Code auch weiß aber nicht so recht wie ich ihn ändern soll?
Wär dir nochmal sehr dankbar für hilfe
Kha - Fr 22.08.08 14:06
beate007 hat folgendes geschrieben: |
sorry dass ich schon wieder stör (oder nerv). |
Kein Problem, dafür sind wir schließlich hier :) . Was uns allerdings eher stört, sind mehrere Fragen im selben Thread, die nicht mehr zur Überschrift passen und meistens dann ein ziemliches Durcheinander auslösen. Sollte also lothi deine Frage nicht sowieso schon beantwortet haben, bitte ich dich, dafür ein neues Thema zu eröffnen.
Sebastian
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!