Dataset only -> DB / Welches System und wie?
- VB.NET
- .NET (FX) 4.0
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 96 Antworten in diesem Thema. Der letzte Beitrag () ist von Bit-Bieger.
-
-
-
-
-
Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
-
prima - hab ich jetzt mit einer Anwendung machen können, und hatte kein Problem damit, das Dataset zu speichern und zu laden.
Nach der Umstellung hat er aber eine neue DatenDatei angelegt - ich bin dem aber nicht nachgegangen.
Vielleicht iwie ein anneres AusgabeDirectory oder neue Settings.
Jdfs. als ich wieder zurück auf AnyCpu bin, war mein Dataset wieder da. -
ErfinderDesRades schrieb:
Jdfs. als ich wieder zurück auf AnyCpu bin, war mein Dataset wieder da.
das Phänomen hab' ich auch - aber der Datenpfad wird doch Codeseitig festgelegt, wie kommt er dann drauf was anneres zu nehmen?"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
naja, sowas etwa:legt einen relativen Pfad zum Ausführungsverzeichnis fest.
Ich vermute, unter x86 ist das Ausführungsverzeichnis ein anderes.
kannste dir ja ausgeben lassen, mal so mal so kompiliert:oder so.
-
Jupp, stimmt so... er hat in nem anderen Verzeichnis nach der Datendatei gewühlt.
Hab's nun vorerst wie folgt gefixed:
damit laufen beide Varianten (AnyCPU und X86) dann kann ich heut abend testen ob die "alte" access-variante mit MDB funzt
ohne Runtimes draufbügeln zu müssen."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
@ErfinderDesRades:
Hast du eine Idee, wie ich rausfinden kann welchen Eintrag er gerade an die Datenbank überspielen will?
Ich mach' das über deineOleDbPersistance
wie folgt (extra mit Tabellenauswahl, damit ich das nach und nach machen kann):
Der Fehler kommt hier (Zeile 6):
VB.NET-Quellcode
- ''' <summary> on Insert-Statements requery the database-generated primary-key. This is not neccessary on in-/out-DbParameters supporting Databases </summary>
- Private Sub Table_RowUpdated(sender As Object, e As OleDbRowUpdatedEventArgs)
- If e.StatementType <> StatementType.Insert Then Return
- Dim primCol = e.Row.Table.PrimaryKey(0)
- Dim primVal = _RequeryIdCommand.ExecuteScalar
- e.Row(primCol) = Convert.ChangeType(primVal, primCol.DataType)
- End Sub
Es gibt aber keine doppelten ID-Werte in meinen Mitarbeitern... für andere Tabellen klappt alles
VB.NET-Quellcode
- Public Sub SaveAll()
- _Con.Open()
- Dim tb = selectTable()
- Dim rows = tb.Select("", "")
- Try
- _Adapters(tb).Update(rows)
- Catch ex As Exception
- Msg(ex.Message)
- End Try
- Dim skipSubOrderedRowsConfig = New _AcceptruleCascadeConfig(_dts)
- skipSubOrderedRowsConfig.Restore()
- _Con.Close()
- End Sub
- Private Function selectTable() As DataTable
- Dim tblname As String = Nothing
- Using dlg As New dlgListbox
- For Each tb In _RankedTables
- dlg.ListBox1.Items.Add(tb.TableName)
- Next
- If dlg.ShowDialog = DialogResult.OK Then
- tblname = dlg.ListBox1.SelectedItem.ToString
- Return _dts.Tables(tblname)
- End If
- End Using
- Return Nothing
- End Function
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
MIr scheint, die Datenbank hat einen PrimKey-Wert vergeben, den du schon hast in deim Dataset.
Normal werden Dataset-Primkeys ja immer negativ generiert - Datenbank-Primkeys aber positiv - da kann so eine Kollision nicht auftreten.
Also DataTable.INcrementStep und .IncrementSeed täte ich als erstes nachgucken: beide müssen negativ sein, um solche Kollisionen auszuschliessen.
Alle Primkeys deines kompletten Datasets müssen, wenn sie noch nicht in eine DB geupdated wurden, negativ sein. (gilt natürlich nicht für String-PKs, aber mit denen haste ja annere Probleme - )
Tritt das im laufenden Betrieb auf, oder ist das ein Problem bei deiner Migration Dataset->Datenbank?
-
Bei der Migration..
Ich weiß, um welchen Mitarbeiter es geht - aber egal was ich ändere, hilft nix
ErfinderDesRades schrieb:
Alle Primkeys deines kompletten Datasets müssen, wenn sie noch nicht in eine DB geupdated wurden, negativ sein
sind sie
ErfinderDesRades schrieb:
Also DataTable.INcrementStep und .IncrementSeed täte ich als erstes nachgucken: beide müssen negativ sein
ist beides negativ
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tragl“ ()
-
Hmm - eine Mitarbeiter.Id kann nur positiv geworden sein, wenn sie gleichzeitig auch als ForeignKey missbraucht wird. Weil dann würde das Speichern eines übergeordneten Datensatz auch die MA.Id ins positive drehen.
Ist das Dataset noch dasselbe wie früher, oder magst du lieber ein aktuelles anhängen?
Hab jetzt geguckt - nix verdächtiges gefunden.
Du kannst einen bedingten Haltepunkt auf den Property-Setter setzen, der anschlägt, wenn ein positiver Wert zugewiesen wird.
Muss ja irgendwann passieren, und zwar bevor die Mitarbeiter-Tabelle selbst abgespeichert wird.
(Oder ich hab iwie ein Bug verzapft)
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
ErfinderDesRades schrieb:
Ist das Dataset noch dasselbe wie früher, oder magst du lieber ein aktuelles anhängen?
reicht dir ein leeres Dataset? Sind ja Live-Daten drin - ansonsten muss ich die Daten tauschen gegen irgendwas Dummy-mäßiges, das dauert aber"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
-
ErfinderDesRades schrieb:
Ist nicht einfach zu finden, weil ist im generierten Code.
meinst du das hier?:
kann mir aber nicht vorstellen dass das was damit zu tun hat - er füllt ja erstmal nur die database und bekommt noch garkeine Positiven
ID's zurück - das wird ja erst passieren wenn ich aus der Database, anstatt der XML die Daten lade.."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
-
ErfinderDesRades schrieb:
sondern MitarbeiterRow.ID
dann meinst du folgenden Abschnitt:
bis dahin kommt er aber garnicht. wie gesagt, die richtung hier ist erstmal NUR DataSet -> Datenbank"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Ganz sicher wird beim
tragl schrieb:
NUR DataSet -> Datenbank
Und zwar bevor die MitarbeiterTabelle selbst dran ist mit abspeichern.
Allerdings hast du vmtl recht - an der typisierten generierten Property geht das vorbei, weil der DataAdapter direkt auf die untypisierte DataTable zugreift.
Also könnteste das Table_ColumnChanged-Event abonnieren - das geht vom untypisierten Dataset aus. -
ErfinderDesRades schrieb:
in irgendeinem Moment eine MitarbeiterRow.ID auf 25 gesetzt.
ja, aber in der database und nicht im dataset, genau da ist ja mein Problem - trotz dass alle ID's im Dataset negativ und eindeutig sind findet er angeblich doppelte"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
-
Ähnliche Themen
-
7 Benutzer haben hier geschrieben
- tragl (45)
- ErfinderDesRades (34)
- Kasi (8)
- MrTrebron (4)
- Akanel (3)
- Bit-Bieger (2)
- petaod (1)