Daten-Import über DataSet

09/12/2008 - 09:42 von Michael Kolowicz | Report spam
Guten Morgen,

ich habe ein Problem bei einem Import-Projekt für unsere neuen
Anwendung. Wir möchten bestehende daten aus der alten Anwendung
übernehmen. Nun ist der Design der neuen Tabelle mit AutoIncremt auf dem
ID-Feld und start mit 1 vorgegeben.

Wir haben in unserem Import-Projekt ein Dataset angelegt, alle Spalten
enthàlt. In der alten DB gab es keinen Eintrag mit der ID 0. Nun
brauchen wir aber nachtràglich noch einen "Leereintrag" (der Eintrag 0
mit leeren Datenfeldern). Diesen möchten wir auf die ID 0 setzen.

Wir haben eine ROW erzeugt und verscuht den Wert ID auf 0 zu setzen.
Beim Schreiben in die DB wird aber daraus autm. wieder eine 1. Danach
kann dann natürlich der Eintrag mit der ID 1 nicht mehr eingefügt
werden, da 1 ja schon vorhanden ist.

Meine Frage: Wie stelle ich das AutoIncrement vorübergehend ab, bevor
ich das DataSet in die DB schreibe

mfg
Michael
 

Lesen sie die antworten

#1 Peter Götz
09/12/2008 - 13:24 | Warnen spam
Hallo Michael,

ich habe ein Problem bei einem Import-Projekt
für unsere neuen Anwendung. Wir möchten bestehende
daten aus der alten Anwendung übernehmen. Nun ist
der Design der neuen Tabelle mit AutoIncremt auf dem
ID-Feld und start mit 1 vorgegeben.

Wir haben in unserem Import-Projekt ein Dataset angelegt,
alle Spalten enthàlt.



Ein DataSet enthàlt keine Spalten.
Es kann z.B. DataTables und/oder Relation-Objekte
enthalten.

In der alten DB gab es keinen Eintrag mit der ID 0.
Nun brauchen wir aber nachtràglich noch einen "Leereintrag"
(der Eintrag 0 mit leeren Datenfeldern). Diesen möchten wir
auf die ID 0 setzen.

Wir haben eine ROW erzeugt und verscuht den Wert ID auf
0 zu setzen. Beim Schreiben in die DB wird aber daraus
autm. wieder eine 1. Danach kann dann natürlich der
Eintrag mit der ID 1 nicht mehr eingefügt werden, da 1
ja schon vorhanden ist.

Meine Frage: Wie stelle ich das AutoIncrement vorübergehend
ab, bevor ich das DataSet in die DB schreibe.



Erst mal solltest Du Dir die Unterschiede zwischen
DataSet und DataTables mit DataRows klar machen.
Das DataSet ist nur ein Container, der u.a. auch DataTables
enthalten kann. Eine DataTable muss aber nicht notwendiger-
weise in einem DataSet liegen.

Bei welchem Wert eine AutoIncrement-Spalte einer
DataTable beim ersten Datensatz zu zàhlen beginnt,
wird durch DataTable.Columns(x).AutoIncrementSeed
bestimmt.

Hier mal ein kleines Beispiel.

' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
DGV.Dock = DockStyle.Fill
Me.Controls.Add(DGV)

CreateData()
DGV.DataSource = mDV
DGV.AutoResizeColumns()

End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns(0).AutoIncrement = True
.Columns(0).AutoIncrementSeed = 0
.Columns(0).AutoIncrementStep = 1

.Columns.Add("Monat", GetType(String))
.Columns.Add("Mon", GetType(Integer))

For i = 1 To 12
DR = .NewRow
' DR.Item(0) wird autom. eingefügt
DR.Item(1) = MonthName(i, False)
DR.Item(2) = i
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)
End Sub
End Class
' \\\ E N T E

Das Progràmmchen erstellt eine DataTable mit den Feldern
ID (Autowert), Monat (String) u. Mon (Integer) mit zugehöriger
DataView und befüllt diese DataTable mit 12 Datensàtzen.
Der Wert in ID für den ersten Datensatz wird in der Sub CreateData
durch mDT.Columns(0).AutoIncrementSeed = 0 bestimmt.

Diesen Wert kannst Du beliebig àndern. Es können sowohl
positive als auch negative Werte eingesetzt werden.

mDT..Columns(0).AutoIncrementStep = 1 bestimmt, dass mit
jedem neuen Datensatz der Wert für ID um 1 erhöht wird. Du
könntest hier auch beispielsweise den Wert -1 einsetzen, was
zur Folge hàtte, dass die Werte für ID absteigend (um jeweils 1)
vergeben würden.

Am besten einfach mal den Code in ein leeres Formmodul
kopieren und dann das Programm mit unterschiedlichen
Einstellungen für

mDT.Columns(0).AutoIncrementSeed
mDT.Columns(0).AutoIncrementStep

starten. Das Ergebnis siehst Du dann in einem DataGridView.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen