Datatable Merge

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von heinkurz.

    Datatable Merge

    Ich glaub ich steh heut ein wenig daneben. Unten eine Codebeispiel für das MERGE von 2 Datatables. Bisher hat das immer tadellos funktioniert aber diesmal bekomm ich beim MERGE die Fehlermeldung "NullReferenceException wurde nicht behandelt." Warum? Ich hab doch alle Variablen deklariert. Und es müsste auch egal sein, wenn dbDT1 aus Oracle kommt und dbDT2 aus Access, oder?

    VB.NET-Quellcode

    1. ...
    2. Dim sqls As String = " ... SQL Query für Oracle ... "
    3. Dim dbDAora As Odbc.OdbcDataAdapter = New Odbc.OdbcDataAdapter(sqls, dbConOra)
    4. Dim dbDT1 As New DataTable
    5. dbDAora.Fill(dbDT1)
    6. dbConOra.Close()
    7. dbDT1.PrimaryKey = New DataColumn() {dbDT1.Columns("INum")} ' notwendig für MERGE
    8. sqls = " ... SQL Query für Access ... "
    9. Dim dbDT2 As New DataTabledbDA = New OleDb.OleDbDataAdapter(sqls, dbConn)
    10. dbDA.Fill(dbDT2)
    11. dbDT2.PrimaryKey = New DataColumn() {dbDT2.Columns("INum")} ' notwendig für MERGE
    12. dbDT1.Merge(dbDT2)

    Wo ist mein Denkfehler?
    Sind in beiden Tabellen die Spaltendefinitionen gleich?

    Wenn z.B. in der Zieltabelle bei einer Spalte AllowDBNull=FALSE gesetzt ist, in der zu mergenden Tabelle (Quelltabelle) aber nicht, so kann es sein, das in der Quelltabelle Datensätze existieren, bei denen der Wert der Spalte DBNull ist.
    Das wäre dann eine Erklärung für die Fehlermeldung.

    us4711 schrieb:

    Sind in beiden Tabellen die Spaltendefinitionen gleich?

    Wenn z.B. in der Zieltabelle bei einer Spalte AllowDBNull=FALSE gesetzt ist, in der zu mergenden Tabelle (Quelltabelle) aber nicht, so kann es sein, das in der Quelltabelle Datensätze existieren, bei denen der Wert der Spalte DBNull ist.
    Das wäre dann eine Erklärung für die Fehlermeldung.

    Aus dem SQL Query ergibt sich, dass keine Null-Datensätze vorkommen. Es kann aber sein, dass ein Wert von INum in dbDT2 nicht in dbDT1 vorkommt, daher wären die restlichen Felder leer. Aber soweit ich mich erinnern kann, sollte das kein Problem sein.